我有一個選擇查詢哪一個有很多條件變量在裏面,所有索引和第二個索引條件變量較少。主要的有條件的是** XX **內的,其餘的都是可選的。你能建議哪一個可能會導致更快,更好的查詢請。mysql選擇性能(許多變量與索引vs較少有索引的變量)
我只需要知道是否可以通過更多的可選索引條件變量與更少。
1) SELECT *
FROM tableX
WHERE city_id = :city_id
AND category_id = :category_id
AND type_id = :type_id
AND **valid_date** > :date_now
AND (**N_lat** BETWEEN :sw_lat AND :ne_lat)
AND (**E_lng** BETWEEN :sw_lng AND :ne_lng)
AND (**price_deposit** BETWEEN :min_deposit AND :max_deposit)
AND (**price_rent** BETWEEN :min_rent AND :max_rent)
ORDER BY $colomnX DESC
2) SELECT *
FROM tableX
WHERE **valid_date** > :date_now
AND (**N_lat** BETWEEN :sw_lat AND :ne_lat)
AND (**E_lng** BETWEEN :sw_lng AND :ne_lng)
AND (**price_deposit** BETWEEN :min_deposit AND :max_deposit)
AND (**price_rent** BETWEEN :min_rent AND :max_rent)
ORDER BY $colomnX DESC
使用EXPLAIN http://dev.mysql.com/doc/refman/5.5/en/explain-output.html – Naktibalda
更多的條件=更多的比較,這將吃更多的CPU。你無法解決這個問題。另一方面,實際從存儲中獲取匹配記錄的成本可能會超過比較成本,因此通過儘早消除更多記錄來減少獲取要求可能會有所幫助。但總的來說,我們無法回答這個問題。它完全取決於你的索引結構,以及數據庫如何執行。 –
謝謝,我會考慮通過消除更多的可選變量來減少索引,以便節省更多的CPU,但我不確定這是否會導致mysql通過減少條件讀取更多記錄? –