最近到手一个任务,一张表里有400万数据,拿来查询,一开始最简单的分页not in结果数据库一分钟都没反应,用临时表也差不多没反应.取消了.然后id>max(id)这下分页是毫秒级别的.以为完美了.结果却是没有任何条件查询的,然后放上了一个 name like '%???%'一下子查出来了.花了7秒左右,这显然不现实一个条件就要7秒,如果两个三个乃至十个,只有一个like的时候,效率慢然后换成了charindex好像是快上了那么一/两秒这也不够啊,用mssql性能分析,没有创建聚合索引提示,所以来求助
用select max/min吧
在查询列上加索引。
给需要like的字段加上索引,还有就是不要使用not in.如果要用也要给not in 的列,加上索引。
1.不要用select * 要用select 你要显示的字段........
2.用存储过程分成查询,并从每页过滤
具体不了解,可以试试存储过程
存储过程也是sql语句写出来的好么...语句都运行不成功..存储过程..
like 查询,本身就是非常慢的,加上数据量是非常大的,再怎么优化,也不可能满足业务逻辑的需求,变通方法:如果like的关键字是有限多个,可以事先将结果计算出来,放到一个表中,每次like匹配的时候,直接到这个表中查看,不知道你明白我说的方法没,我现在的项目中,就是使用这种方式,我们的表的数据量达到千万级,adhoc查询显然不现实,预先计算好才能解决此类问题。
明白你的意思..但是我这个是专门负责拿来搜索的,每次搜索的都不一样也就那么10个左右字段.
我们的库千万级,我第一次用的时候一条统计库里多少条记录的sql执行了半个小时。 以后也要学习下优化,哈哈~