我有一個INNER JOIN簡單的查詢。連接的表格有1500行和2500行。兩個表都有一個主鍵。此連接不在此鍵上完成。添加限制加速mysql查詢,爲什麼?
此查詢的結果集有1500行。 當我運行此查詢它需要20秒......(一個永恆)
SELECT so.order_id
FROM shop_orders so
INNER JOIN shop_order_payments sop
ON so.order_code = sop.order_code
WHERE sop.status = 9
ORDER BY date_created DESC
當我然後添加「LIMIT 1500」末,查詢只需要1秒。 (當我刪除它需要20秒,所以它不是緩存...)
- 這是爲什麼?
- 有沒有一種快速的方法來找出這個查詢有多少行作爲結果?
注:我運行PHP腳本這個查詢與MySQL()函數)
* UPDATE1:結果的EXPLAIN
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE sop ALL NULL NULL NULL NULL 1153 Using where; Using temporary; Using filesort 1 SIMPLE so ALL NULL NULL NULL NULL 2529 Using where
- 更新2:
我按照評論中的要求運行DESC
payment_id - int(11) NO PRI auto_increment timestamp - timestamp NO CURRENT_TIMESTAMP order_code - varchar(100)NO acceptance - varchar(50) NO amount - varchar(20) NO
所以只有一個主要指標出現,這是不夠的,作爲一個索引?
'EXPLAIN'說什麼? –
查詢需要很長時間才能運行,因爲可能缺少索引。你可以查詢這個結果嗎? 'DESC shop_orders'和'DESC shop_order_payments'? –
你有什麼指數?你可以爲每個表顯示「SHOW CREATE TABLE ...」的輸出嗎? –