我有一个MySQL查询(Ubu 10.04,Innodb,Core i7,16Gb RAM,SSD驱动器,MySQL params优化):
SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (SELECT l.id FROM em_link l WHERE l.campaignid = '2900' AND l.link != 'open')
Run Code Online (Sandbox Code Playgroud)
表em_link_data有大约7百万行,em_link有几千行.此查询大约需要18秒才能完成.但是,如果我替换子查询的结果并执行此操作:
SELECT
COUNT(DISTINCT subscriberid)
FROM
em_link_data
WHERE
linkid in (24899,24900,24901,24902);
Run Code Online (Sandbox Code Playgroud)
那么查询将在不到1毫秒的时间内运行.子查询单独运行不到1毫秒,列linkid被索引.
如果我将查询重写为连接,也不到1毫秒.为什么"IN"查询的子查询速度如此之慢以及为什么这么快的值?我无法重写查询(购买软件)所以我希望有一些调整或提示来加速这个查询!任何帮助表示赞赏.