30万条数据,搜索文本字段的各种方式对比

30万条,有ID列但无主键,在要搜索的“分类”字段上建有非聚集索引

过程T-SQL:

/*

用户自定义函数:执行时间在1150-1200毫秒左右

CREATE FUNCTION [dbo].[gethl] (@types nvarchar(4))

RETURNS table AS

return select 书名 from 图书三十万条 Where 分类 Like '%'+@types+'%'

存储过程:

CREATE PROCEDURE [dbo].[getfl](@typen nvarchar(4))

AS

select 书名 from 图书三十万条 Where 分类 Like '%'+@typen+'%'

*/

declare @a datetime,@b nvarchar(4)

set @a=getDate()

select 书名 from 图书三十万条 Where 分类 Like '%医学%' --“分类”列有非聚集索引,比聚集索引1150快一点,差不多执行时间在1100左右

-- select 书名 from gethl('医学') --使用用户自定义函数,效率和建立聚集索引一样,还稍慢一点 在1150-1200

-- Execute getfl '医学' --调用存储过程不能用括号包含参数 Execute getfl('医学')

-- select 书名 from VIEW1 --视图

print '运行时间:

print datediff(ms,@a,getDate())

结论:

1、以上各种使用直接查询、函数、视图、存储过程性能都差不多;

2、在这种文本字段,非聚集比聚集索引效果好。

比这些更好的方法是,在另外一个表上建立相应的检索ID,会更快!

时间: 2024-11-08 21:36:14

30万条数据,搜索文本字段的各种方式对比的相关文章

mssql 30万条数据 搜索文本字段的各种方式对比

数据库: 30万条,有ID列但无主键,在要搜索的"分类"字段上建有非聚集索引 过程T-SQL: 复制代码 代码如下: /* 用户自定义函数:执行时间在1150-1200毫秒左右 CREATE FUNCTION [dbo].[gethl] (@types nvarchar(4)) RETURNS table AS return select 书名 from 图书三十万条 Where 分类 Like '%'+@types+'%' 存储过程: CREATE PROCEDURE [dbo].[

mssql 30万条数据 搜索文本字段的各种方式对比_MsSql

数据库: 30万条,有ID列但无主键,在要搜索的"分类"字段上建有非聚集索引 过程T-SQL: 复制代码 代码如下: /* 用户自定义函数:执行时间在1150-1200毫秒左右 CREATE FUNCTION [dbo].[gethl] (@types nvarchar(4)) RETURNS table AS return select 书名 from 图书三十万条 Where 分类 Like '%'+@types+'%' 存储过程: CREATE PROCEDURE [dbo].[

mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式)

mysql快速导入5000万条数据过程记录(LOAD DATA INFILE方式) 首先将要导入的数据文件top5000W.txt放入到数据库数据目录/var/local/mysql/data/${db_name}/ 下,并确保导入用户拥有这个txt文件的权限,否则会报Error 13错误 1.${table_name}换myisam,我们的场景对事务没啥要求,innodb引擎速度太慢了,原来导入12个小时都没导完 2.导入前修改参数和禁止索引更新mysql> SET SESSION BULK_

30万条数据快速检索的T

数据库: 30万条,有ID列但无主键,在要搜索的"分类"字段上建有非聚集索引 过程T-SQL: /* 用户自定义函数:执行时间在1150-1200毫秒左右 CREATE FUNCTION [dbo].[gethl] (@types nvarchar(4)) RETURNS table AS return select 书名 from 图书三十万条 Where 分类 Like '%'+@types+'%' 存储过程: CREATE PROCEDURE [dbo].[getfl](@typ

探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页

探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的一表的部分数据结构: CREATE TABLE [dbo].[TGongwen] (    --TGongwen是红头文件表名    [Gid] [int] IDENTITY (1, 1) NOT NULL ,--本表的id号,也是主键    [title] [varchar] (80) COLLATE Chinese_PRC_CI_AS NULL ,  --红头文件的

现在有1500万条数据,想从中随机抽取50万条,采用什么方式比较快捷?

问题描述 现在有1500万条数据,想从中随机抽取50万条,采用什么方式比较快捷? 现在有1500万条数据,想从中随机抽取50万条,采用什么方式比较快捷.数据是存储在mysql里的. 解决方案 额,试试随机生成Where条件来做 解决方案二: SELECT * FROM table_name ORDER BY RAND() limit 500000 解决方案三: 随机获取索引,limit 会连续取值,不会随机 解决方案四: 随机获取索引,limit 会连续取值,不会随机 解决方案五: ORDER

极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)     实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方法所耗费的时间.     本实验中所用到工具为VS2008和SQL SERVER 2000.SQL SERVER 2008,分别使用5中方法将100万条数据导入SQL 2000与SQL 2008中,实验环境是DELL 2850双2.0GCPU,2G内存的服务器.感兴趣的朋友可以下载源代码自己

怎样快速的向SQL-2000里插入10万条数据啊?

问题描述 本人刚参加了一个公司的笔试,有这样一道题,想到了一个笨方法,但速度比较慢,有没有比较快速的方法,向数据库里插入10万条数据?谢谢了... 解决方案 解决方案二:BULKINSERT解决方案三:能不能说的清楚点,还是不明白.解决方案四:在SQL联机帮助里找找看,网上搜索下也行的.解决方案五:有点难度哦

Js表格万条数据瞬间加载实现代码

 一条数据创建一行,如果数量大的时候,一次性要加载完数据的话,浏览器就会卡上半天,下面有个不错的方法,大家可以参考下 Js表格,万条数据瞬间加载    在Ajax动态加载数据的实际应用中,大家都习惯了一种思维方式:一条数据创建一行.  于是如果数量大的时候,一次性要加载完数据的话,浏览器就会卡上半天    受Flex的DataGrid控件的启发,在Flex的DataGrid控件中,展示数据的方法并不是有多少条数据就创建多少行,它最多只创建你在界面上所看到的十几二十行(假设为n行),如果数据多的话