【发布时间】:2012-02-22 16:05:27
【问题描述】:
如果这两个查询会有很大的性能差异,我只是担心
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
查询工作得很好..他们俩..只是担心性能:)
编辑:当我做一些测试时,一件奇怪的事情是这样的:
SELECT * FROM qy9zh_dataitems WHERE Select6 in ('kvinna') LIMIT 0, 40000
总共 29,051 个,查询耗时 0.2581 秒
SELECT * FROM qy9zh_dataitems WHERE Select6 LIKE ('%kvinna%') LIMIT 0, 40000
总共 29,113 个,查询耗时 0.2218 秒
【问题讨论】:
-
你知道这两个查询有不同的结果吗?
-
结果不是问题..只是好奇性能:)
-
kill 性能问题是第一个查询中的起始通配符。
-
您在编辑中得到的结果可能是因为您紧接着运行它们;缓存会影响结果。只需执行
EXPLAIN PLAN并查看输出 -LIKE查询将显示需要TABLE SCAN,这意味着由于起始通配符必须检查每一行。 -
这两个查询不是一个意思,你应该比较
Select6 in ('kvinna')和Select6 = 'kvinna'。两者都查找Select6等于'kvinna'的行。但是Select6 LIKE ('%kvinna%')会查找Select6包含'kvinna'的行。它还会找到'abc kvinna xyz'。
标签: mysql sql performance select sql-like