SQL 優(yōu)化

SQL 優(yōu)化

負(fù)向查詢不能使用索引

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

應(yīng)該修改為:

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

前導(dǎo)模糊查詢不能使用索引

如:

select name from user where name like '%zhangsan'

非前導(dǎo)則可以:

select name from user where name like 'zhangsan%'

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

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

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

字段的默認(rèn)值不要為 null

這樣會(huì)帶來(lái)和預(yù)期不一致的查詢結(jié)果。

在字段上進(jìn)行計(jì)算不能命中索引

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

應(yīng)該修改為:

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

最左前綴問(wèn)題

如果給 user 表中的 username pwd 字段創(chuàng)建了復(fù)合索引那么使用以下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ù)庫(kù)停止游標(biāo)移動(dòng)。

不要讓數(shù)據(jù)庫(kù)幫我們做強(qiáng)制類型轉(zhuǎn)換

select name from user where telno=18722222222

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

需要修改為

select name from user where telno='18722222222'

如果需要進(jìn)行 join 的字段兩表的字段類型要相同

不然也不會(huì)命中索引。

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

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

  • 我始終相信,走過(guò)平湖煙雨,歲月山河,那些歷盡劫數(shù)、嘗遍百味的人,會(huì)更加生動(dòng)而干凈。
    James孔閱讀 386評(píng)論 0 1
  • 事件:老公告訴我?guī)滋烨埃趩挝话l(fā)生的與專家公開爭(zhēng)執(zhí)的事。并且承擔(dān)了后果與處罰。 感受:心痛、平靜、麻木、喜悅。 ...
    崇榮閱讀 152評(píng)論 0 0
  • 寒從何而來(lái)? 一、熬出內(nèi)寒 在中醫(yī)養(yǎng)生看來(lái),子時(shí)覺(jué)至關(guān)重要,晚上十一點(diǎn)前要進(jìn)入睡眠。因?yàn)樽訒r(shí)這個(gè)時(shí)候陰氣盛到極點(diǎn),...
    葆和堂閱讀 103評(píng)論 0 0

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