鍍金池/ 問答/數據庫  HTML/ mysql優(yōu)化

mysql優(yōu)化

SELECT COUNT(*) AS num FROM test WHERE ( a = 111 AND cid = 21432 OR s_status <> 'yes' OR t_status <> 'yes' ) AND test.delete_time IS NULL LIMIT 1

explain 這個語句type顯示為ALL該怎么優(yōu)化?

回答
編輯回答
淺時光

個人理解,希望對你有所幫助

  • 使用or分割的條件,如果or前的條件中的列有索引,后面的列中沒有索引,那么涉及到的索引都不會使用。
    參考:使用UNION合并查詢
  • 負向查詢(not,not in,not like,<>,!=,!>,!<)不會使用索引
    參考:如果是確定且有限的集合時,可以使用IN
  • 應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描
    參考:將本為null值針對字段類型賦個默認值(String 則為"",以此類推)
2017年1月13日 13:19
編輯回答
怣痛

樓上正解,首先,要盡量減少一些樓上說的操作。不然,永遠是 all 。:) ??茨?sql 語句,可以知道你的需求,應該是統(tǒng)計數據數量。條件分別為 a= 111 ,cid = 21432 | s_status != yes | t_status != yes ,test.delete is null。最終結果為: 好了,不可能的,優(yōu)化不了,(至少我是)。首先,要想用 索引,先將 null 禁止,用 0 或者其它代替。二,yes 這個不要用不等,用 like 進行檢索,可以配合 if 方法。

2017年9月13日 03:07