在日常的sql查询中为了保证查询高效率,常会对查询句子开展sql优化,下边整理的一些方法,有需求的可以参考一下。
1.对查询开展优化的事宜,要尽量避免全表扫描仪,首先应该选择在 where 及 order by 涉及到的列上建立索引。
2.应尽量避免在 where 子句上对字段开展 null 系数的分辨,否则会使模块舍弃引索而产生的全表扫描仪,如:
select id from t where num is null
能够在num字段上设置默认值,保证表中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 '�c%'
7.应尽量避免在 where 子句上对字段开展关系式实际操作,这可能导致模块舍弃引索而产生的全表扫描仪。如:
select id from t where num/2=100
应改成:
select id from t where num=100*2
8.应尽量避免在where子句上对字段开展函数公式实际操作,这可能导致模块舍弃引索而产生的全表扫描仪。如:
select id from t where substring(name,1,3)='abc'--name以abc开头的id
应改成:
select id from t where name like 'abc%'