![](/img/trans.png)
[英]MySql, I'm not sure if my indexes are correct or if I can improve the speed of my query?
[英]I'm not sure if I have the correct indexes or if I can improve the speed of my query in MySQL?
我的查詢有一個連接,看起來它使用兩個索引,這使它更復雜。 我不確定我是否能改進這一點,但我想我會問。
該查詢生成一個記錄列表,其中包含與要查詢的記錄類似的關鍵字。
這是我的查詢。
SELECT match_keywords.padid,
COUNT(match_keywords.word) AS matching_words
FROM keywords current_program_keywords
INNER JOIN keywords match_keywords
ON match_keywords.word = current_program_keywords.word
WHERE match_keywords.word IS NOT NULL
AND current_program_keywords.padid = 25695
GROUP BY match_keywords.padid
ORDER BY matching_words DESC
LIMIT 0, 11
解釋
Word是varchar(40)。
您可以從嘗試刪除IS NOT NULL測試開始,該測試由字段上的COUNT隱式刪除。 看起來你也想從match_keywords
省略25695,否則25695(或其他)肯定會在你的11行限制中顯示為“最佳”匹配?
SELECT match_keywords.padid,
COUNT(match_keywords.word) AS matching_words
FROM keywords current_program_keywords
INNER JOIN keywords match_keywords
ON match_keywords.word = current_program_keywords.word
WHERE current_program_keywords.padid = 25695
GROUP BY match_keywords.padid
ORDER BY matching_words DESC
LIMIT 0, 11
接下來,考慮一下如何做一個人。
padid + word
沒有重復) 使用3個單獨的單列索引列表,前兩個步驟(都只涉及2列)將始終必須從索引跳回到數據以獲取另一列。 覆蓋索引可能會有所幫助 - 創建兩個要測試的復合索引
create index ix_keyword_pw on keyword(padid, word);
create index ix_keyword_wp on keyword(word, padid);
使用這些復合索引,您可以刪除padid
和word
上的padid
索引,因為它們被這兩個索引覆蓋。
注意:您始終必須調整SELECT性能
請嘗試以下操作...確保PadID上的索引和WORD上的索引。 然后,通過更改SELECT WHERE限定符的順序,首先應對CURRENT關鍵字的PADID進行優化,然后加入其他...將連接排除到自身。 此外,由於您正在檢查內部聯接與匹配關鍵字的相等性...如果檢查當前關鍵字為null,則它應該永遠不會加入空值,從而消除了對MATCH關鍵字別名的比較,因為查看了每個比較尋找NULL ...
SELECT STRAIGHT_JOIN
match_keywords.padid,
COUNT(*) AS matching_words
FROM
keywords current_program_keywords
INNER JOIN keywords match_keywords
ON match_keywords.word = current_program_keywords.word
and match_keywords.padid <> 25695
WHERE
current_program_keywords.padid = 25695
AND current_program_keywords.word IS NOT NULL
GROUP BY
match_keywords.padid
ORDER BY
matching_words DESC
LIMIT
0, 11
您應該索引以下字段(檢查對應的表)
match_keyword.padid
current_program_keywords.padid
match_keyword.words
current_program_keywords.words
希望它有助於加速
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.