0

我在获取为此查询(由 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案例。

4

1 回答 1

0

复合索引通常比在索引合并优化中组合的多个单列索引提供更好的性能。

如果您在请求查询帮助时包含查询的当前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);
于 2014-10-02T17:46:56.617 回答