[英]MySQL slow query joining two tables with fulltext condition on each
我需要加入兩個表(分別為 1M 行和 10M 行)
每個表都使用全文匹配條件進行過濾:
SELECT SQL_NO_CACHE c.company_index
FROM dw.companies c INNER JOIN dw.people p
ON c.company_index = p.company_index
WHERE MATCH ( c.tag ) AGAINST ( 'ecommerce' IN BOOLEAN MODE )
AND MATCH ( p.title ) AGAINST ( 'director' IN BOOLEAN MODE )
ORDER BY c.company_index DESC ;
兩個表都有全文索引(在“標簽”和“標題”上)
兩種情況下查詢時間均超過 1 百萬。
只有這兩個條件之一,查詢時間低於 1 秒。
我怎樣才能優化這個查詢?
我認為問題在於如果可以先執行 FULLTEXT 非常快,但如果不能執行則非常慢。 對於原始查詢中的兩個測試,一個 MATCH 可以是第一個,但另一個不能。
這是關於如何解決該問題的混亂想法。
SELECT c.company_index
FROM ( SELECT company_index FROM companies WHERE MATCH... ) AS c
JOIN ( SELECT company_index FROM people WHERE MATCH... ) AS p
ON c.company_index
= p.company_index
ORDER BY ...
您使用的是什么版本的 MySQL? 較新的版本將自動在“派生”表之一上創建索引,從而使JOIN
非常有效。
這是另一種方法:
SELECT c.company_index
FROM ( SELECT company_index FROM companies WHERE MATCH... ) AS c
WHERE EXISTS ( SELECT 1 FROM people WHERE MATCH...
AND company_index = c.company_index )
ORDER BY ...
在這兩種情況下(我希望)一個SELECT
將使用一個 FT 索引; 另一個將使用另一個,從而獲得 FT 性能優勢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.