我有这个查询:
SELECT stringa FROM table WHERE stringb = 'x' OR stringb = 'y' OR stringb = 'z'
这只是一个缩短版本,实际查询在一个查询中有超过 1,000 个“OR”子句。
执行需要几分钟,这是不好的。
我试过一次做一个查询,如下所示:
SELECT stringa FROM table WHERE stringb = 'x'
SELECT stringa FROM table WHERE stringb = 'y'
SELECT stringa FROM table WHERE stringb = 'z'
但这需要更长的时间。我还尝试了一个大查询,如下所示:
SELECT stringa FROM table WHERE stringb = 'x'
UNION
SELECT stringa FROM table WHERE stringb = 'y'
UNION
SELECT stringa FROM table WHERE stringb = 'z'
但这又花了更长的时间。
如果有人对提高性能有任何建议,将不胜感激。我的桌子是 MyISAM,如果它很重要的话。
编辑:
这是表的结构:
列:
key (CHAR PRIMARY), stringa (CHAR), stringb (CHAR)
行看起来像这样:(key - stringa - stringb)
key - a - b
key - a - c
key - a - d
key - a - e
key - a - f
key - b - b
key - b - c
key - b - d
key - c - c
key - c - d
key - c - f
key - d - f
等等等等..有将近一百万行。
我需要选择所有“stringa”,其中“stringb”等于 a OR b OR c 等。
当然 stringa 和 stringb 不仅仅是 'a' 和 'b',它们包含长度在 3 到 80 个字符之间变化的 CHAR。
我希望在某种程度上有所帮助