FIND_IN_SET()替代?

yiw*_*wei 2 mysql

我有一个目前看起来像的查询:

SELECT [column a], [column b], [column c], [column d]
FROM [table] 
WHERE FIND_IN_SET(2, column d)
ORDER BY [column a] DESC
Run Code Online (Sandbox Code Playgroud)

其中[column d]属于type varchar,并且包含一组数字(ex,3, 2, 4, 6, 1, 9).所以基本上我试图返回其中2包含数字集的所有记录.但是,当我EXPLAIN在上面的查询上执行一个时,这是我的输出:

id  select_type table   type    possible_keys   key     key_len     ref     rows        Extra
1   SIMPLE      [table] ALL     NULL            NULL    NULL        NULL    500000      Using where; Using filesort
Run Code Online (Sandbox Code Playgroud)

在执行此查询期间,此查询似乎没有使用任何索引.[column a]是主键,因此该列上已有索引.有没有办法利用这个查询的索引运行得更快?或者还有另一种方法可以改善此查询的性能吗?

use*_*740 5

替代方案:正确规范化架构.

FIND_IN_SET 不是 Sargable,并且无法使用索引.

  • 哇第一次听到*sargable*,你是创建wiki页面的人;-) (5认同)
  • @ ring0我责怪我前一段时间读过的另一个SO答案(也许是来自wiki页面的作者)..希望我可以信用xD (2认同)