SQL查询性能LIKE和wildecards vs. IN

Mac*_*ito 3 mysql sql performance select sql-like

我只是觉得如果这2个查询会有很大的性能差异

SELECT 
  `items_id`, `sport_id`, `sport`, `title`, `url`, 
  `Select3`, `Select6`, `id`, `data`,`image` as image,
  concat('index.php?option=sports&item=',`items_id`,'&p=C108-M108') as count_url
FROM 
  qy9zh_dataitems
WHERE Select6 LIKE '%sport%'
ORDER BY `Select9` DESC LIMIT 0, 4


SELECT 
  `items_id`, `sport_id`, `sport`, `title`, `url`, 
  `Select3`, `Select6`, `id`, `data`,`image` as image,
  concat('index.php?option=sports&item=',`items_id`,'&p=C108-M108') as count_url
FROM 
  qy9zh_dataitems 
WHERE Select6 in ('sport') 
ORDER BY `Select9` DESC LIMIT 0, 4
Run Code Online (Sandbox Code Playgroud)

查询工作得很好..他们两个..只是担心性能:)

编辑:当我做一些测试时,一个奇怪的事情是:

SELECT * FROM qy9zh_dataitems WHERE Select6 in ('kvinna') LIMIT 0, 40000
Run Code Online (Sandbox Code Playgroud)

共计29,051次,查询耗时0.2581秒

SELECT * FROM qy9zh_dataitems WHERE Select6 LIKE ('%kvinna%') LIMIT 0, 40000
Run Code Online (Sandbox Code Playgroud)

总共29,113,查询花了0.2218秒

Oli*_*bes 5

如果在列上定义了索引,并且您正在查找此列的开头,请参阅

name LIKE 'Jo%' 
Run Code Online (Sandbox Code Playgroud)

索引可用于加速查询.但是,如果您正在寻找单词的任何部分,请参阅

name LIKE '%man%' 
Run Code Online (Sandbox Code Playgroud)

索引无法使用.

IN子句通常非常快,但我不知道它是否可以利用索引.

查询的速度取决于适当索引的可用性,表的大小,值的分布(具有相同值的许多行,每行具有不同的值),当然还取决于查询本身.我认为你的问题不能得到普遍回答.进行测试并进行比较!