簡體   English   中英

MySQL查詢速度極慢

[英]Extremely slow MySQL query

我在MySQL中有兩個表,table1有1,013,347個實體和38個屬性,table2有7,343,905個實體和10個屬性。 在以下查詢中(應該獲取分頁的行數),table1.ID是PK,table2.ID是它的FK(兩者都被索引),如果HAVING子句超過一定百分比,則獲取值,在這種情況下50%

SELECT SQL_CALC_FOUND_ROWS * 
FROM table1 INNER JOIN table2 ON table1.ID = table2.ID 
WHERE table1.attribute1 LIKE 'D%' 
GROUP BY table2.ID 
HAVING (COUNT(table2.ID) * (100/18)) >= '50'

即使在我發布的簡化狀態下,此查詢也可以通過命令行運行不少於5分鍾。 我知道我必須對查詢進行更改,PHP代碼(值'50'和'D'通過PHP變量分配)和/或我的MySQL配置以加快速度(我正在使用最新的XAMPP,默認配置)。 任何幫助將不勝感激。

EDIT1:所有屬性都是TINYTEXT,但ID屬性是VARCHAR(9)。

EDIT2:EXPLAIN SELECT ...返回:

+----+-------------+--------+------+---------------+-------------+---------+------+---------+---------------------------------+
| id | select_type | table  | type | possible_keys | key         | key_len | ref  | rows    | Extra                           |
+----+-------------+--------+------+---------------+-------------+---------+------+---------+---------------------------------+
|  1 | SIMPLE      | table2 | ALL  | NULL          | NULL        | NULL    | NULL | 7343905 | Using temporary; Using filesort |
|  1 | SIMPLE      | table1 | ref  | ID            | ID          | 29      | func |       1 | Using where                     |
+----+-------------+--------+------+---------------+-------------+---------+------+---------+---------------------------------+
2 rows in set (0.00 sec)

以下是一些潛在的改進:

  • 您正在使用類型為VARCHAR(9)的ID,並且您正在使用這些字段進行連接。 引入整數代理鍵而不是varchars來加速連接可能是個好主意。 這個討論
  • LIKE運營商通常很貴。 考慮你的用法; 像Marc建議的那樣,你應該索引table1.attribute1。
  • 也許你可以通過省略LIKE來加速查詢:例如,你可以使用RIGHT() ,而不是使用'D%',雖然我不確定它是否會更快。 如果表中的數據不經常更改,則可以創建一個新的索引列,其中預先切割table1.attribute1值; 然而,它依賴於php腳本在LIKE之后插入的值。

很少有提高績效的想法

  1. 索引table2.ID(必須)和table1.ID也是如此
  2. 如果可能的話,使id列bigint和table1.attribute1成為varchar。 請注意根據列的假定數據長度為varchar列定義合適的大小
  3. 而不是在SQL(100/18)內進行計算,而是像這樣替換它

    HAVING(COUNT(table2.ID)*(5.5555))> = 50

(因為table2.ID現在是一個bigint,數學比較必須稍快一些)

就像我看到的那樣,like子句在這個查詢中是至關重要的,即使它很昂貴,如果你索引table1.attribute1也會更好。

希望這可以幫助

暫無
暫無

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

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