【发布时间】:2018-08-23 12:31:50
【问题描述】:
我需要经常获取最近 24 小时的数据,并且此查询经常运行。 由于这会扫描很多行,因此经常使用它会影响数据库性能。
MySql 执行策略在 created_at 上选择索引并返回大约 1,00,000 行。并且这些行被一一扫描以过滤customer_id = 10,我的最终结果有20000行。
如何优化这个查询?
explain SELECT *
FROM `order`
WHERE customer_id = 10
and `created_at` >= NOW() - INTERVAL 1 DAY;
id : 1
select_type : SIMPLE
table : order
partitions : NULL
type : range
possible_keys : idx_customer_id, idx_order_created_at
key : idx_order_created_at
key_len : 5
ref : NULL
rows : 103357
filtered : 1.22
Extra : Using index condition; Using where
【问题讨论】:
-
您正在选择
*。你真的需要所有的列吗? -
不,原始查询中没有 *
标签: mysql sql optimization query-optimization