一般问题
一般来说,问题是:在单个字段上是一个复杂的LIKE,比使用"的WHERE更快="在多个字段上?
哪个查询的记录数超过100M,速度最快?
第一个选项:
SELECT * from codes WHERE code LIKE "_A__9_2__"
第二种选择:
SELECT * from codes WHERE char_2 = "A" AND char_5 = "9" and char_7= "2"
上下文
我们有一个sw生成超过100M的固定长度字符串(精度为9个字符(我们必须做吨,实际上是吨,这是sw的目标,只使用1到9个字符的的查询
我认为第二种方法的唯一折衷是,对每个字段进行索引以优化查找速度,这将使数据成倍增加。
但是,虽然我认为第二种方式更好,但我不知道它是否真的像那样快
foo = 'x'
和INDEX(foo)
是快速的- 如果没有外卡,
LIKE 'x'
和= 'x'
一样快—— LIKE 'x%'
包含一个尾随通配符,因此它的工作方式类似于";范围";(例如BETWEEN
(。如果该列上有索引,则性能中等- CCD_ 7慢;则不会使用该索引
- 具有
INDEX(x,y)
或INDEX(y,x)
的x='a' AND y='b'
与具有其索引的foo = 'x'
一样快 MID(x, 2, 1) = 'a'
不是可搜索的,因此速度较慢,因为它无法使用索引
";索引每一个字段以优化查找速度"——为8列中的每一列编制索引是实用的,但可能没有您希望的那么有用。
char_2 = "A"
可以返回100K行;则必须针对其他列检查这些列- 使用
INDEX(char_2, char5)
可能只返回10K行,但现在需要36个索引来处理2列的所有组合。有64个索引的硬性限制。(以及10岁以下的"实用"限制。(
更多关于索引的信息:索引食谱