在单个字段上使用 LIKE 的复杂 LIKE 还是在多个字段上使用 WHERE 最快的"="?

  • 本文关键字:LIKE 字段 WHERE 单个 复杂 mysql
  • 更新时间 :
  • 英文 :


一般问题

一般来说,问题是:在单个字段上是一个复杂的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岁以下的"实用"限制。(

更多关于索引的信息:索引食谱

最新更新