有没有办法加速这件事?
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)
)
答案 0 :(得分:0)
IN ( 1,2,3 )
和IN ( "1,2,3" )
之间存在差异。你可能想要前者。我不知道第一个SELECT
给你的是什么。 插值后,请提供SELECT
。
子查询只能给你后者。
我建议INDEX(nameid, oid, value)
最有可能提供帮助。获得该索引后,您可能需要InnoDB充分利用它。