mysql FIND_IN_SET 对比 REGEXP 性能
mysql FIND_IN_SET vs REGEXP performance
我正在写一个问题,因为我在使用 mysql 时有一个问题。
我知道它在结构上是错误的。
但是因为已经写了很多数据和代码,很难改。
我使用 typeorm set 将多个数据放在一列中。
'A,B,C,D' , 'A', 'C,D'
数据如上输入,不能输入重复值
奇怪的是使用REGEXP时速度是一样的,FIND_IN_SET因为还没有足够的数据使速度有所不同
所以我很好奇。
在下面的两个查询中,如果我必须使用它,哪个占上风?
#1
SELECT *
FROM CAT
WHERE CONCAT(",", CATDATA, ",") REGEXP ",(A|B|C|D),"
#2
SELECT *
FROM CAT
WHERE FIND_IN_SET('A',CATDATA)
OR FIND_IN_SET('B',CATDATA)
OR FIND_IN_SET('C',CATDATA)
OR FIND_IN_SET('D',CATDATA)
最终可以拆分成不同的table,
但请理解这是一个需要立即使用的查询。
我想知道哪个更快一点,#1 或#2。
谢谢。
任一公式都必须检查 table 中的每一行;没有 INDEX
有帮助。主要成本是获取行。表达式评估是次要的。我不知道哪个更快,但我希望差异(对于整个查询)低于 10%,因此不值得担心。
typeorm 的局限性是什么? “A”真的是一个字母吗?或者它可以是更长的字符串,例如“ACE”?
你考虑过
SET('A','B','C','D','E','F')
SET 中每个项目的内部表示为 1 位,名称可以是任意字符串(不允许逗号除外)。
SET
和 TINYINT
(被视为最多 8 位)不会更快,但会减少 space.
我正在写一个问题,因为我在使用 mysql 时有一个问题。
我知道它在结构上是错误的。 但是因为已经写了很多数据和代码,很难改。
我使用 typeorm set 将多个数据放在一列中。
'A,B,C,D' , 'A', 'C,D'
数据如上输入,不能输入重复值
奇怪的是使用REGEXP时速度是一样的,FIND_IN_SET因为还没有足够的数据使速度有所不同
所以我很好奇。 在下面的两个查询中,如果我必须使用它,哪个占上风?
#1
SELECT *
FROM CAT
WHERE CONCAT(",", CATDATA, ",") REGEXP ",(A|B|C|D),"
#2
SELECT *
FROM CAT
WHERE FIND_IN_SET('A',CATDATA)
OR FIND_IN_SET('B',CATDATA)
OR FIND_IN_SET('C',CATDATA)
OR FIND_IN_SET('D',CATDATA)
最终可以拆分成不同的table, 但请理解这是一个需要立即使用的查询。
我想知道哪个更快一点,#1 或#2。 谢谢。
任一公式都必须检查 table 中的每一行;没有 INDEX
有帮助。主要成本是获取行。表达式评估是次要的。我不知道哪个更快,但我希望差异(对于整个查询)低于 10%,因此不值得担心。
typeorm 的局限性是什么? “A”真的是一个字母吗?或者它可以是更长的字符串,例如“ACE”?
你考虑过
SET('A','B','C','D','E','F')
SET 中每个项目的内部表示为 1 位,名称可以是任意字符串(不允许逗号除外)。
SET
和 TINYINT
(被视为最多 8 位)不会更快,但会减少 space.