12.SQL優(yōu)化

SQL 優(yōu)化

負向查詢不能使用索引

select name from user where id not in (1,3,4);

應該修改為:

select name from user where id in (2,5,6);

前導模糊查詢不能使用索引

如:

select name from user where name like '%zhangsan'

非前導則可以:

select name from user where name like 'zhangsan%'

建議可以考慮使用 Lucene 等全文索引工具來代替頻繁的模糊查詢。

數(shù)據(jù)區(qū)分不明顯的不建議創(chuàng)建索引

如 user 表中的性別字段,可以明顯區(qū)分的才建議創(chuàng)建索引,如身份證等字段。

字段的默認值不要為 null

這樣會帶來和預期不一致的查詢結果。

在字段上進行計算不能命中索引

select name from user where FROM_UNIXTIME(create_time) < CURDATE();

應該修改為:

select name from user where create_time < FROM_UNIXTIME(CURDATE());

最左前綴問題

如果給 user 表中的 username pwd 字段創(chuàng)建了復合索引那么使用以下SQL 都是可以命中索引:

select username from user where username='zhangsan' and pwd ='axsedf1sd'

select username from user where pwd ='axsedf1sd' and username='zhangsan'

select username from user where username='zhangsan'

但是使用

select username from user where pwd ='axsedf1sd'

是不能命中索引的。

如果明確知道只有一條記錄返回

select name from user where username='zhangsan' limit 1

可以提高效率,可以讓數(shù)據(jù)庫停止游標移動。

不要讓數(shù)據(jù)庫幫我們做強制類型轉換

select name from user where telno=18722222222

這樣雖然可以查出數(shù)據(jù),但是會導致全表掃描。

需要修改為

select name from user where telno='18722222222'

如果需要進行 join 的字段兩表的字段類型要相同

不然也不會命中索引。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 巴法利·尼克斯說,婚姻是一本書,第一章寫的是詩篇,其余則是平淡的散文。 每個人都帶著濾鏡走進婚姻,最初看對方如詩般...
    汪貴梅閱讀 277評論 1 1
  • 小草,人人都知道,它默默無聞地點綴世界,它是美的化身,以前在那一片草坪上,總能看見綠油油的小草,個個昂首挺胸,...
    段夢磊閱讀 313評論 0 0
  • s=v*t+0.5at2 定律不是我瞎編的,出自物理中方向運行的距離~ s:有愛婚姻的發(fā)展路徑 v:愛情起跑初速度...
    小林玄閱讀 514評論 0 4
  • 學經(jīng)時間:20181123 學經(jīng)方法:147累積法 學經(jīng)內(nèi)容:《易經(jīng)》中孚卦第六十一;《中國古典長詩精選》將進酒;...
    繼明親子教育童志燕閱讀 76評論 0 0

友情鏈接更多精彩內(nèi)容