簡體   English   中英

SQL 查詢很慢:索引?

[英]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')

適當的索引位於categorytypecaseB和其他列上。 所以試試這個索引:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM