SQL语句
SELECT product_name,
SUM(quantity * price * (1 - COALESCE(discount, 0))) AS total_sales
FROM sales_records
GROUP BY product_name
HAVING total_sales > 10000
ORDER BY total_sales DESC;
优化思路
- 索引优化:
- 可以在
product_name
字段上创建索引,因为在 GROUP BY
操作时,索引能够加快分组的速度。
- 执行语句
CREATE INDEX idx_product_name ON sales_records(product_name);
- 避免函数操作:尽量不在查询的
WHERE
子句中对列进行函数操作,因为这样会阻止索引的使用。在上述查询中,COALESCE
函数在 SUM
内部,而不是 WHERE
子句中,减少了对索引使用的影响。
- 分区表:如果数据量极大,可以考虑对
sales_records
表进行分区。例如按时间或其他逻辑进行分区,这样在查询时可以减少需要扫描的数据范围,提高查询效率。但SQLite本身对分区表支持有限,可能需要结合应用层逻辑来模拟分区。