分组依据,排序依据和统计MySQL性能

时间:2019-07-03 21:38:03

标签: mysql group-by count sql-order-by

我有一个下一个查询来获取一个位置上15个最畅销的盘子:

此查询需要12秒才能执行超过100,000行。我认为执行时间太长,因此我正在寻找一种优化查询的方法。

我在PHPMyAdmin上运行了解释SQL命令,并得到了以下信息: [![在此处输入图片描述] [1]] [1]

据此,主要问题在于正在扫描整个表的p表上,但是我该如何解决呢? p表的ID是主键,是否还需要将其设置为索引?另外,还有什么我可以做的才能使查询运行更快?

2 个答案:

答案 0 :(得分:0)

您可以在两个表之间建立关系。 https://database.guide/how-to-create-a-relationship-in-mysql-workbench/

除此之外,您还可以使用左连接,这样就不会装入整个右表。 在MySQL中,order by是一个很慢的函数,如果您以后使用代码,则只需用比order by快得多的代码即可。

我希望我能帮助和社区随时进行编辑:)

答案 1 :(得分:-1)

您确实包括了解释计划,但是没有提供有关表结构,数据分布,基数或卷的任何信息。假设您的索引是准确的并且您的数据分布均匀,那么查询必须处理超过1200万行,而不是100,000行。但是即便如此,那还是相对较差的表现。但是您从未告诉我们这是什么硬件,也没有后台负载。

具有这么多联接的查询总是很慢-它们都需要吗?

  

主要问题在于正在扫描整个表的p表上

全表扫描不会自动变坏。与流式读取相比,取消引用索引查找的成本大约高20倍。由于您对此表施加的唯一约束是它与其他表的联接,因此您提出的问题中没有任何建议可以建议对此进行改进的范围。