我在此查詢,這似乎是太慢了一些問題......如何加快這個緩慢的查詢?
SELECT SUM(c) FROM (
(
SELECT COUNT(id) AS c
FROM QueueOne
WHERE id = my_id
)
UNION ALL (
SELECT COUNT(id) AS c
FROM QueueTwo
WHERE id = my_id
)
UNION ALL (
SELECT COUNT(id) AS c
FROM QueueThree
WHERE id = my_id
)
UNION ALL (
SELECT COUNT(id) AS c
FROM QueueFour
WHERE id = my_id
)
) AS d
其實原因很簡單: QueueOne,QueueTwo,QueueThree,QueueFour 四個隊列不同類型的列不幸的是不能將其歪成一列。
該查詢爲我們提供了每個隊列表中所有等待隊列的數量。 似乎對於mysql來說太慢了,因爲它將它記錄在slow-query.log文件中
任何幫助,將不勝感激。
編輯 這裏的解釋:
+----+--------------+-------------------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------+-------------------+------+---------------+------+---------+------+------+-------------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 4 | |
| 2 | DERIVED | QueueOne | ref | ID | ID | 4 | | 1 | Using index |
| 3 | UNION | QueueTwo | ref | ID | ID | 4 | | 1 | Using index |
| 4 | UNION | QueueThree | ref | ID | ID | 4 | | 1 | Using index |
| 5 | UNION | QueueFour | ref | ID | ID | 4 | | 1 | Using index |
| NULL | UNION RESULT | <union2,3,4,5> | ALL | NULL | NULL | NULL | NULL | NULL | |
+----+--------------+-------------------+------+---------------+------+---------+------+------+-------------+
6 rows in set (0.82 sec)
編輯2: 多一點信息,一些表幾乎15000000記錄
是否在所有表上編制了「id」列? – 2011-04-28 12:39:44
請提供給我們一個解釋也。 – Pentium10 2011-04-28 12:45:33
這些'QueueX'表或視圖(或別的東西)? – 2011-04-28 13:13:57