簡體   English   中英

MySQL內部連接查詢運行緩慢

[英]mysql inner join query running slow

這是我的mysql查詢:

SELECT DISTINCT a.lineid
FROM (SELECT DISTINCT tmd.lineid, a.linename
      FROM tagmodeldata tmd
           INNER JOIN
           tagline a
           ON a.documentid = tmd.documentid AND tmd.tagvalue = 3
      WHERE tmd.documentid = 926980) a
      INNER JOIN
     (SELECT DISTINCT tmd.lineid, b.linename
      FROM tagmodeldata tmd
           INNER JOIN
           tagline b
           ON b.documentid = tmd.documentid AND tmd.tagvalue IN (0 , 1)
      WHERE tmd.documentid = 926980) b
      ON b.linename = a.linename;

大約需要160秒才能運行,這對我來說太慢了。 基本思路是檢索那些具有tagvalue的linename為3,匹配具有tagvalue 0或1的linename的lineid。

+--+----+-------------+------------+------+---------------------------+----------------+---------+------+-------+--------------------------------+
|  | id | select_type |   table    | type |       possible_keys       |      key       | key_len | ref  | rows  |             Extra              |
+--+----+-------------+------------+------+---------------------------+----------------+---------+------+-------+--------------------------------+
|  |  1 | PRIMARY     | <derived3> | ALL  | NULL                      | NULL           | NULL    | NULL | 14760 | Using temporary                |
|  |  1 | PRIMARY     | <derived2> | ALL  | NULL                      | NULL           | NULL    | NULL | 72160 | Using where; Using join buffer |
|  |  3 | DERIVED     | b          | ref  | documentid                | documentid     |       5 |      |   593 | Using where; Using temporary   |
|  |  3 | DERIVED     | tmd        | ref  | documentid,document_index | document_index |       4 |      | 66784 | Using where                    |
|  |  2 | DERIVED     | a          | ref  | documentid                | documentid     |       5 |      |   593 | Using where; Using temporary   |
|  |  2 | DERIVED     | tmd        | ref  | documentid,document_index | document_index |       4 |      | 66784 | Using where                    |
+--+----+-------------+------------+------+---------------------------+----------------+---------+------+-------+--------------------------------+

您似乎希望特定文檔的行同時具有3和0或1。如果是這樣,則可以只使用條件聚合。 結果查詢如下所示:

SELECT tmd.lineid
FROM tagmodeldata tmd INNER JOIN
     tagline a
     ON a.documentid = tmd.documentid AND tmd.tagvalue IN (0, 1, 3)
WHERE tmd.documentid = 926980
GROUP BY tmd.lineid
HAVING SUM(tmd.tagvalue = 3) > 0 AND
       SUM(tmd.tagvalue IN (0, 1)) > 0;

尚不清楚tagline.linenametagline.lineid之間的關系。 以上假設它們是相同的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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