使用常量列表值加速查询

时间:2017-04-13 14:27:56

标签: mysql performance explain

有没有办法加速这件事?

SELECT LOWER(nameid), COUNT(nameid) AS cant
FROM infos AS i
WHERE i.value > 0 
AND i.oid IN ($1) 
AND i.nameid IN ($2)
GROUP BY nameid 

$ 1 是一长串逗号分隔的ID,如1,2,3,4,5,6,7等。

$ 2 是逗号分隔字符串的列表,如“ABC”,“DEF”,“GHI”等。

CREATE TABLE `infos` (
  `id` int(11) NOT NULL,
  `oid ` int(11) NOT NULL DEFAULT '0',
  `nameid` varchar(10) NOT NULL DEFAULT '',
  `value ` mediumint(9) UNSIGNED NOT NULL DEFAULT '1'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 CHECKSUM=1;

我尝试过这样的事情,但结果并不相同:

SELECT merkmalid, i.wert FROM infos AS i
WHERE i.oid IN     
(
    SELECT * FROM
    (
       SELECT ($1)         
    ) AS sub
    WHERE i.nameid IN ($2)
)

1 个答案:

答案 0 :(得分:0)

IN ( 1,2,3 )IN ( "1,2,3" )之间存在差异。你可能想要前者。我不知道第一个SELECT给你的是什么。 插值后,请提供SELECT

子查询只能给你后者。

我建议INDEX(nameid, oid, value)最有可能提供帮助。获得该索引后,您可能需要InnoDB充分利用它。