sql 優化方法
(1)Where子句中:where表之間的連接必須寫在其他Where條件之前,那些可以過濾掉最大數量記錄的條件必須寫在Where子句的末尾.HAVING最後。--- 需要按照順序進行一級一級的篩選
(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。
exists 條件 返回的 是boolean型 只有 true 或者 false; 所以在exists 中的id 條件 應該是 外查詢的查詢id
SELECT * FROM alumni_info t WHERE EXISTS(SELECT a_id FROM alumni_education e WHERE t.id
xeg:SELECT * FROM alumni_info t WHERE EXISTS(SELECT a_id FROM alumni_education e WHERE e.a_id=‘6588‘ ),返回的結果跟SELECT * FROM alumni_info t一樣(a_id=6588存在),因為select語句先執行where條件後的語句,再篩選字段,當執行完where條件後,若這條結果集存在,則where表達式後面永遠都是true,否則為false。也就是說要麽查詢所有,要麽沒有數據。
卡券項目中我想查詢卡券發行數量超過100張的卡券信息:
select * from wechatcarden wc where exists (select * from wechatcardsummary w where wc.id = w.weChatCardEnId
等價於:select * from wechatcarden uw left join wechatcardsummary ws on uw.id = ws.weChatCardEnId where ws.skuQuantity >= 1000
(3) 避免在索引列上使用計算
(4)避免在索引列上使用IS NULL和IS NOT NULL
(5)對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
(6)應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描
(7)應盡量避免在 where 子句中對字段進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描
sql 優化方法