[英]SQL query is slow: indexes?
我有以下 SQL 查詢,但查詢速度很慢:(頁面加載 2 秒)。
mysql_query("select * from table_test
WHERE ((owner = '$id' AND ownersecond = '0') OR ownersecond = '$id')
AND catogory = '1' AND type = '$car[id]' AND caseB = '0'
AND (timeback < TIMESTAMP(NOW()) OR timeback = '0000-00-00 00:00:00') ");
我想通過使用索引來改進 SQL 語句。 我已經在行上有一個索引:所有者和所有者第二。 將索引放在 type、caseB 和 tieback 上有用嗎? 還是我越來越慢 sql? 因為有很多索引?
或者:將上面的 SQL 重寫為更快的查詢是否更好? 有沒有人有更好的書面查詢的建議。 提前致謝。
只關注查詢(而不是過時的 mysql_ 接口):
select *
from table_test
WHERE ((owner = '$id' AND ownersecond = '0') OR ownersecond = '$id') AND
catogory = '1' AND
type = '$car[id]' AND
caseB = '0' AND
timeback < TIMESTAMP(NOW()) OR timeback = '0000-00-00 00:00:00')
適當的索引位於category
、 type
、 caseB
和其他列上。 所以試試這個索引:
create index idx_table_test_6 on table_test(category, type, caseB, timeback, owner, ownersecond)
該索引可用於所有where
條件,盡管select *
需要原始數據頁。
使用EXPLAIN來診斷正在使用的索引(如果有)。 我建議學習如何使用 EXPLAIN,因為我們很難推薦額外的索引。 如果讓我猜一猜,我會說您的timeback
列需要一個索引,這僅僅是因為時間戳列可能比owner
列更加多樣化。 為每一列添加索引將增加插入/更新所需的時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.