MySQl查询:加入和分组,性能降低
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQl查询:加入和分组,性能降低,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2597字,纯文字阅读大概需要4分钟。
内容图文
![MySQl查询:加入和分组,性能降低](/upload/InfoBanner/zyjiaocheng/902/0422c3fb547748208ceaf39b3801407c.jpg)
我有一个MySQL查询的问题,我无法优化它.
SELECT
p.id,
p.name,
p.sku,
p.type
FROM
xm_products p
LEFT JOIN xm_store_product sp ON p.id = sp.product_id
LEFT JOIN xm_store s ON sp.store_id = s.id
WHERE
s.id = 1
ORDER BY
p.type,
p.name asc
LIMIT
20 OFFSET 0
此查询非常慢:Querytime 2.532s
如果我删除Order By子句,查询速度非常快:0.0001s
说明显示以下信息:
+----+-------------+-------+--------+-------------------------------------------+----------------------+---------+---------------------------------------+--------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-------------------------------------------+----------------------+---------+---------------------------------------+--------+----------------------------------------------+
| 1 | SIMPLE | s | const | PRIMARY | PRIMARY | 4 | const | 1 | Using index; Using temporary; Using filesort |
| 1 | SIMPLE | sp | ref | IDX_CA42254AB092A811,IDX_CA42254A4584665A | IDX_CA42254AB092A811 | 5 | const | 102157 | Using where |
| 1 | SIMPLE | p | eq_ref | PRIMARY | PRIMARY | 4 | model.sp.product_id | 1 | |
+----+-------------+-------+--------+-------------------------------------------+----------------------+---------+---------------------------------------+--------+----------------------------------------------+
3 rows in set
我有3张桌子:
>具有主键ID的xm_product
>具有主键ID的xm_store
> xm_store_product,其中包含store_id和product_id上的索引
我尝试在p.name和p.type上添加索引以及组合索引(p.name,p.type),但它没有帮助.
如何优化此查询的性能?
编辑:
我花了2个小时创建了一个sqlfidle.但这里有一些数据.
http://sqlfiddle.com/#!2/2bf8d/1
问题是“分组依据”导致“使用索引;使用临时;使用filesort”.
我怎样才能纠正我的例子?
编辑2:
De xm_products表有大约200’000条记录. xm_store_products大约400’000.查询用于寻呼机,每页限制为20个.
解决方法:
在积极反馈后我会把它作为答案:)
表现存在(明显的)差异很有意义.
我不知道你的桌子有多大,但LIMIT 20只会在没有订单的情况下提高性能.
使用order by,所有记录首先必须在订单发生之前检索,而没有订单,执行在20次匹配后停止.
也许在你的order-by-clause上有一个综合索引,你可以获得性能.
内容总结
以上是互联网集市为您收集整理的MySQl查询:加入和分组,性能降低全部内容,希望文章能够帮你解决MySQl查询:加入和分组,性能降低所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。