我有一个带有 INNER JOIN 的简单查询。连接的表有 1500 和 2500 行。两个表都有一个主键。未在此键上完成连接。
此查询的结果集有 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 秒,所以它不是缓存......)
- 为什么是这样 ?
- 有没有一种快速的方法来找出这个查询有多少行?
注意:我使用 mysql() 函数在 php 脚本中运行此查询)
*update1: EXPLAIN 的结果
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE sop ALL NULL NULL NULL NULL 1153 使用 where;使用临时的;使用文件排序 1 SIMPLE 所以 ALL NULL NULL NULL NULL 2529 使用 where
- 更新 2:
我按照评论中的要求运行了 DESC
payment_id - int(11) NO PRI auto_increment 时间戳 - 时间戳 NO CURRENT_TIMESTAMP order_code - varchar(100)NO 接受 - varchar(50) 否 金额 - varchar(20) 否
所以只显示一个主索引,这还不够索引吗?