如何使用100.000条记录优化此SQL查询?

时间:2019-04-04 15:36:09

标签: mysql

有我的SQL查询。表system_mailer用于记录已发送的电子邮件。当我想搜索一些数据时,查询时间为10秒。有可能以任何方式优化此查询吗?

SELECT `ID` 
FROM `system_mailer` 
WHERE `group` = 'selling_center' 
  AND `group_parameter_1` = '1' 
  AND `group_parameter_2` = '2138'

Timins大约需要几秒钟,如何进行优化?

2 个答案:

答案 0 :(得分:0)

您可能会在4列上找到以下索引有助于提高性能:

CREATE INDEX idx ON system_mailer (`group`, group_parameter_1, group_parameter_2, ID);

MySQL应该能够在当前查询中使用此索引。顺便说一句,如果您使用的是InnoDB,并且ID是主键,则可以将其从显式索引定义中删除,只需使用以下方法即可:

CREATE INDEX idx ON system_mailer (`group`, group_parameter_1, group_parameter_2);

请避免使用保留的MySQL关键字(例如group)命名列和表。由于您已做出此设计决定,因此现在您将被迫永远用反引号使该列名称转义(难看)。

答案 1 :(得分:0)

just be sure you have a composite index on  table  system_mailer  for the columns  

          (`group`, `group_parameter_1`, `group_parameter_2`)

并且您可以使用冗余在索引中添加id以避免查询中的数据表访问

          (`group`, `group_parameter_1`, `group_parameter_2`, ID)