explain mysql 語句,在extra欄里出現 Using index condition 很好奇為什么呢? 是好還是不好?
首先 肯定答案: 是好的!
解釋:
Using index condition 叫作 Index Condition Pushdown Optimization (索引下推優化)。
Index Condition Pushdown (ICP)是MySQL使用索引從表中檢索行的一種優化。如果沒有ICP,存儲引擎將遍歷索引以定位表中的行,並將它們返回給MySQL服務器,服務器將判斷行的WHERE條件。在啟用ICP的情況下,如果可以只使用索引中的列來計算WHERE條件的一部分,MySQL服務器就會將WHERE條件的這一部分推到存儲引擎中。然后,存儲引擎通過使用索引條目來評估推入的索引條件,只有當滿足該條件時,才從表中讀取行。ICP可以減少存儲引擎必須訪問基表的次數和MySQL服務器必須訪問存儲引擎的次數。
ICP的適用性取決於以下條件:
7.觸發的條件不能被壓制。
4.測試應用於此表的WHERE條件的其余部分。根據測試結果接受或拒絕行
SELECT * FROM people WHERE zipcode='95054' AND lastname LIKE '%etrunia%' AND address LIKE '%Main Street%';
MySQL可以使用索引掃描郵編為'95054'的人。第二部分(lastname LIKE '%etrunia%')不能用於限制必須掃描的行數,因此如果沒有ICP,該查詢必須檢索zipcode='95054'的所有人的完整表行。使用ICP,MYSQL在讀取全部行表時,可以先檢查
lastname LIKE '%etrunia%' 的部分,這樣避免了那部分多的數據的返回。
官方文檔解釋:https://dev.mysql.com/doc/refman/5.7/en/index-condition-pushdown-optimization.html
