gpt4 book ai didi

mysql - 如何加速这个 SQL 索引查询?

转载 作者:可可西里 更新时间:2023-11-01 07:05:55 25 4
gpt4 key购买 nike

Given the following SQL table :

Employee(ssn, name, dept, manager, salary)

You discover that the following query is significantly slower than expected. There is an index on salary, and you have verified that the query plan is using it.

SELECT * 
FROM Employee
WHERE salary = 48000

Please give a possible reason why this query is slower than expected, and provide a tuning solution that addresses that reason.

对于为什么这个查询比预期慢,我有两个想法。一个是我们正在尝试 SELECT * 而不是 SELECT Employee.salary 这会减慢查询速度,因为我们必须搜索所有列而不是一个列。另一个想法是salary 上的索引是非聚集,我们想使用聚集 索引,因为公司可能非常大按 salary 字段组织表格是有意义的。

这两种解决方案中的任何一种都可以加快查询速度吗? IE。将 SELECT * 更改为 SELECT Employee.salary 或显式设置 salary 上的索引进行聚类?

最佳答案

你现在有什么指标?

真的“慢”吗?你有什么证据?

对“SELECT * 而不是 SELECT Employee.salary”的评论 --

  • * 是错误的形式,因为明天您可能会添加一列,从而破坏任何期望以特定顺序排列特定数量的列的代码。
  • *salary 的处理直到找到行之后才会发生。
  • 定位行是成本最高的部分。
  • 另一方面,如果您有 INDEX(salary) 并且查看salary,则该指数是“覆盖”。这意味着不需要获取“数据”(其他列)。因此,更快。但这可能超出了你的老师告诉你的范围。

对“salary上的索引是非聚簇的,我们想用聚簇索引”的评论--

  • 在 MySQL 中(不一定在其他 RDBMS 中),InnoDB 只有一个 PRIMARY KEY 并且它始终是 UNIQUE 和“集群”。
  • 即“集群”隐含着“独特”,用“薪资”似乎不太合适。
  • 在 InnoDB 中,“辅助键”隐含地包含 PK 的列 (ssn?),通过它可以访问数据。

“验证了查询计划”——你了解EXPLAIN SELECT ...了吗?

More Tips为给定的 SELECT 创建最佳索引。

关于mysql - 如何加速这个 SQL 索引查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43564316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com