给定以下SQL表:
员工(ssn,姓名,部门,经理,薪水)
您发现以下查询明显慢于预期.有一个索引
salary,您已验证查询计划正在使用它.
SELECT *
FROM Employee
WHERE salary = 48000
Run Code Online (Sandbox Code Playgroud)
请说明此查询比预期慢的可能原因,并提供解决该原因的调优解决方案.
我有两个想法,为什么这个查询比预期慢.一个是我们正在尝试SELECT *而不是SELECT Employee.salary减慢查询速度,因为我们必须搜索所有列而不是一个.另一个想法是,该指数salary是非群集,和我们想用一个聚集索引,因为该公司可能会非常大,这将是有意义由组织表salary场.
这两个解决方案中的任何一个都会加速这个查询吗 即要么改变SELECT *对SELECT Employee.salary或明确设置的指标salary要群集?
现在有哪些指标?
真的很“慢”吗?你有什么证据?
对“SELECT * 而不是 SELECT Employee.salary”的评论 --
*这是不好的形式,因为明天您可能会添加一列,从而破坏任何期望按特定顺序包含一定数量列的代码。*vs 的处理。salaryINDEX(salary)且仅查看,salary那么该索引就是“覆盖”。这意味着不需要获取“数据”(其他列)。因此,更快。但这可能超出了你的老师告诉你的范围。对“工资上的索引是非聚集索引,我们想使用聚集索引”的评论--
PRIMARY KEY,并且它始终是UNIQUE“集群”的。ssn,通过它可以访问数据。“验证查询计划”——你了解过吗EXPLAIN SELECT ...?
有关为给定创建最佳索引的更多提示SELECT。