MST

星途 面试题库

面试题:MySQL复杂算术计算及性能优化

假设有一张销售记录表`sales`,包含`product_id`(产品ID), `quantity`(销售数量), `price`(单价)字段。现在需要计算每个产品的总销售额,并按照总销售额降序排列。在查询过程中,要确保计算结果精确,且考虑如何优化查询性能,写出完整的SQL语句并解释优化思路。
28.0万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
SELECT 
    product_id,
    ROUND(SUM(quantity * price), 2) AS total_sales
FROM 
    sales
GROUP BY 
    product_id
ORDER BY 
    total_sales DESC;

优化思路

  1. 索引优化
    • product_id字段上创建索引,如果product_id是表的主键,那么数据库一般会自动创建索引。如果不是,可以使用CREATE INDEX idx_product_id ON sales(product_id);语句创建索引。这样在进行GROUP BY操作时,可以快速定位到不同的product_id分组,提高查询性能。
  2. 避免函数计算
    • 在查询中,尽量避免在WHERE子句中对字段进行函数计算。这里计算总销售额在SELECT子句中进行,不影响性能。如果在WHERE子句中对quantityprice字段进行函数计算,数据库可能无法使用索引,导致全表扫描,性能下降。
  3. 适当使用覆盖索引
    • 如果查询涉及的字段(如product_idtotal_sales计算所需的quantityprice)都包含在索引中,数据库可以直接从索引中获取数据,而不需要回表操作,从而提高查询性能。例如,可以创建一个复合索引CREATE INDEX idx_product_quantity_price ON sales(product_id, quantity, price); ,但要注意索引的维护成本,避免过多的复合索引。