簡體   English   中英

MySQL 慢速查詢連接兩個表,每個表都有全文條件

[英]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.

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