我不明白这个查询中的问题,当我使用 category_id = 'XX' 条件进行查询时,该查询需要几分钟才能执行,但是没有按 category_id 过滤的相同查询需要 0.09 秒,并且 category_id 是一个 int(11) 无符号索引。
这是我的表格:
http://www.youcial.es/tableproblems/table_business.htm
http://www.youcial.es/tableproblems/table_products.htm
解释:
http://www.youcial.es/tableproblems/explain_fast.htm
http://www.youcial.es/tableproblems/explain_slow.htm
唯一的区别是按 category_id 进行过滤。我没有发现按此字段过滤存在性能缓慢的问题。可能是什么问题?
谢谢。
答案1
这是因为您使用了 LIMIT 0,30
您的请求中没有 category_id = 'XX',可以非常快速地找到前 30 个值。
您的请求中带有 category_id = 'XX',必须深入挖掘表格才能找到 30 行(可能是因为您没有很多 'xx')。
如果删除 LIMIT 0,30,您的 2 个请求将具有大约相同的运行长度。