【发布时间】:2012-03-28 16:20:22
【问题描述】:
假设表格:
主要(1M 行): id, a_id, b_id, c_id, d_id, 金额, 年份, main_col
a(500 行): id, a_col1, a_col2
b(2000 行): id, b_col1, b_col2, b_col3
c(500 行): id, c_col1, c_col2
d(1000 行): id, d_col1, d_col2
我们有这样的查询:
select sum(amounts), main_col
join a on a.id = main.a_id
join b on b.id = main.b_id
join c on c.id = main.c_id
join d on d.id = main.d_id
where a.a_col1 in (...)
and a.a_col2 in (..)
and b.b_col1 in (...)
and b.b_col2 in (...)
and b.b_col3 in (..)
and c.c_col1 in (..)
and c.c_col2 in (..)
and d.d_col1 in (..)
and d.d_col2 in (..)
and year = 2011
group by main.main_col
知道谁在主表上创建索引以提高查询性能吗?
谢谢
更新: 将索引添加到 a、b、c、d 表中,以使列显示在 where 我已经在主表(a_id、b_id、c_id、d_id、main_col)上尝试了多个列索引,它们比其他索引具有最佳性能,例如在 a_id、b_id... 上添加单个索引,但它仍然不够快满足要求, on query 将需要 7 秒来运行最大情况
【问题讨论】:
-
如果您真的很难优化查询并且您已经尝试了所有方法,您可能需要查看您的架构。可能会去规范化/创建聚合表等以提高性能。
标签: mysql database performance