Akx*_*kxe 3 regex mysql performance
我犹豫什么应该使用哪种类型.会有很多ID和组,通常他们学会了我做多个表,但第二个版本的regexp看起来很棒而且不那么多余.我很想知道那两个版本更好.
+----+ +----+-------+
| 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($|,)';
Run Code Online (Sandbox Code Playgroud)
只要您有小桌子,您可以自行决定使用两者.
如果您希望桌子增长,您真的需要选择第一个选择.背后的原因是查询where regexp不会使用索引.如您所知,索引是快速查询的关键.
如果您正在使用InnoDB,请定义链接两个表的外键.
你说,你发现第一选择的冗余比第二选择更多.它似乎不适合我.想一想你的草图可能会表明存在误解.它应该看起来像这样,即表1中每个id只有一行,因此没有冗余.
Tbl1 Tbl2
+----+----------+ +----+-------+
| ID |Other cols| | ID | Group |
+----+----------+ +----+-------+
| 1 | | | 1 | gr1 |
| 2 | | | 1 | gr2 |
+----+----------+ | 2 | gr2 |
| 2 | gr3 |
+----+-------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |