我在获取索引时遇到了一些问题(由MicroStrategy生成):
SELECT a11.method method, sum(a11.call_count) CALLCOUNT
FROM call_facts a11
JOIN dimension a12 ON (a11.user_id = a12.user_id)
JOIN service a13 ON (a11.service_id = a13.service_id)
WHERE (a12.is_fraudulent = 0
AND a12.is_test_account = 0
AND a13.in_directory in ('yes')
AND a11.date > '2011-10-01')
GROUP BY a11.method;
我目前在a12.is_fraudulent和a12.is_test_account上有索引。解释显示使用这两者的索引合并。 a11和a13都是好的指数。我可以创建什么索引来加快这个查询的速度?
作为参考,a12有大约8个M条目,其中7.4条与is_test_account = 0 and is_fraudulent = 0
个案例匹配。
答案 0 :(得分:0)
复合索引通常比index-merge optimization中的多个单列索引具有更好的性能。
如果您在询问查询帮助时包含查询的当前EXPLAIN报告,将会很有帮助。
为每个表发布完整的DDL(SHOW CREATE TABLE)也会很有帮助,因为" a11和a13都适用于索引"可能不是真的,并且没有提供关于您在这些表中定义的索引的信息。
如果我要做一些猜测,我会尝试:
ALTER TABLE call_facts ADD INDEX (method, date, call_count);
ALTER TABLE dimension ADD INDEX (user_id, is_fraudulent, is_test_account);
ALTER TABLE service ADD INDEX (service_id, in_directory);