有我的SQL查询。表system_mailer用于记录已发送的电子邮件。当我想搜索一些数据时,查询时间为10秒。有可能以任何方式优化此查询吗?
SELECT `ID`
FROM `system_mailer`
WHERE `group` = 'selling_center'
AND `group_parameter_1` = '1'
AND `group_parameter_2` = '2138'
Timins大约需要几秒钟,如何进行优化?
答案 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)