2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
3.应尽量避免在 where 子句中使用!=或<> *** 作符,否则将引擎放弃使用索引而进行全表扫描。
4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
5.in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
6.下面的查询也将导致全表扫描:
select id from t where name like '%abc%'
若要提高效率,可以考虑全文检索。
%开头的模糊查询是没有办法使用索引的,怎么优化都没有用。一个建议,就是分析字段的含义,以及典型的查询需求,把这个字段拆分为多个独立字段,分别建立索引,这样查询才爽。例如你这个数据,看起来是‘年月日时分秒’的格式,可以把这些信息分散到年、月、日这样的字段里面,就可以模糊查询所有年度的【月】或者类似的复杂组合——需要模糊的内容不写在WHERE里面即可。
SQL 关键索引,在大表上创建索引
千万记录的表不算大,只要索引创建对了,性能可以正常提升,
还有一种就是比较偏的方式:先把需要批量的数据库插入临时表
这个可以防止频繁对表进行查询 *** 作,
SQL 如下:select * into #Temp from Table
后面就只需要对临时表 *** 作,不允许主表性能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)