正则表达式vs连接性能Mysql
我在犹豫我应该用什么类型的。将会有很多ID和组,通常他们会教我做多个表,但是第二个版本的regexp看起来很棒,冗余更少。我很想知道这两个版本中的哪一个更好正则表达式vs连接性能Mysql,mysql,regex,performance,Mysql,Regex,Performance,我在犹豫我应该用什么类型的。将会有很多ID和组,通常他们会教我做多个表,但是第二个版本的regexp看起来很棒,冗余更少。我很想知道这两个版本中的哪一个更好 +----+ +----+-------+ | ID | | ID | Group | +----+ +----+-------+ | 1 | | 1 | gr1 | | 1 | | 1 | gr2 | | 2 | | 2 | gr2 | | 2 | | 2 | gr3 | +--
+----+ +----+-------+
| ID | | ID | Group |
+----+ +----+-------+
| 1 | | 1 | gr1 |
| 1 | | 1 | gr2 |
| 2 | | 2 | gr2 |
| 2 | | 2 | gr3 |
+----+ +----+-------+
SELECT * FROM tbl1 join tbl2 USING(ID) WHERE Group="gr1";
+----+-----------+
| ID | Group |
+----+-----------+
| 1 | gr1,gr2 |
| 2 | gr2,gr3 |
+----+-----------+
SELECT * FROM tbl1 WHERE Group REGEXP '(^|,)gr1($|,)';
只要你有小桌子,你可以随意使用 如果你希望表格增长,你真的需要选择第一选择。背后的原因是使用
where regexp
的查询将不会使用索引。正如您所知,索引是快速查询的关键。如果使用InnoDB,请定义一个链接两个表的外键 你说,你发现第一个选择比第二个有更多的冗余。对我来说似乎不是。考虑到这一点,你的草图可能表明存在误解。它应该是这样的,即表1中每个id只有一行,因此没有冗余
Tbl1 Tbl2
+----+----------+ +----+-------+
| ID |Other cols| | ID | Group |
+----+----------+ +----+-------+
| 1 | | | 1 | gr1 |
| 2 | | | 1 | gr2 |
+----+----------+ | 2 | gr2 |
| 2 | gr3 |
+----+-------+