首页新闻找找看学习计划

mssql百万数据查询

0
悬赏园豆:60 [已解决问题] 解决于 2015-12-25 18:13

最近到手一个任务,一张表里有400万数据,拿来查询,一开始最简单的分页not in结果数据库一分钟都没反应,用临时表也差不多没反应.取消了.然后id>max(id)这下分页是毫秒级别的.以为完美了.结果却是没有任何条件查询的,然后放上了一个 name like '%???%'一下子查出来了.花了7秒左右,这显然不现实一个条件就要7秒,如果两个三个乃至十个,只有一个like的时候,效率慢然后换成了charindex好像是快上了那么一/两秒这也不够啊,用mssql性能分析,没有创建聚合索引提示,所以来求助

Kerwin1202的主页 Kerwin1202 | 初学一级 | 园豆:68
提问于:2015-11-21 01:13
< >
分享
最佳答案
0

用select max/min吧

Kerwin1202 | 初学一级 |园豆:68 | 2015-12-25 18:12
其他回答(6)
0

在查询列上加索引。

收获园豆:10
Firen | 园豆:5483 (大侠五级) | 2015-11-21 08:28
0

给需要like的字段加上索引,还有就是不要使用not in.如果要用也要给not in 的列,加上索引。

收获园豆:10
Supper_litt | 园豆:970 (小虾三级) | 2015-11-21 09:52
0

1.不要用select * 要用select 你要显示的字段........

2.用存储过程分成查询,并从每页过滤

收获园豆:10
三人之行,必有我师 | 园豆:291 (菜鸟二级) | 2015-11-21 14:47
0

具体不了解,可以试试存储过程

收获园豆:10
朝向远方 | 园豆:224 (菜鸟二级) | 2015-11-21 17:08

存储过程也是sql语句写出来的好么...语句都运行不成功..存储过程..

支持(0) 反对(0) Kerwin1202 | 园豆:68 (初学一级) | 2015-11-21 20:30
0

like 查询,本身就是非常慢的,加上数据量是非常大的,再怎么优化,也不可能满足业务逻辑的需求,变通方法:如果like的关键字是有限多个,可以事先将结果计算出来,放到一个表中,每次like匹配的时候,直接到这个表中查看,不知道你明白我说的方法没,我现在的项目中,就是使用这种方式,我们的表的数据量达到千万级,adhoc查询显然不现实,预先计算好才能解决此类问题。

收获园豆:10
悦光阴 | 园豆:2239 (老鸟四级) | 2015-11-29 16:40

明白你的意思..但是我这个是专门负责拿来搜索的,每次搜索的都不一样也就那么10个左右字段.

支持(0) 反对(0) Kerwin1202 | 园豆:68 (初学一级) | 2015-11-29 16:53
0

我们的库千万级,我第一次用的时候一条统计库里多少条记录的sql执行了半个小时。    以后也要学习下优化,哈哈~

小刺猬001 | 园豆:656 (小虾三级) | 2015-11-30 14:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册