我在犹豫我应该使用什么类型。真的会有很多 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($|,)';

最佳答案

只要你有小 table ,你就可以随意使用两者。

如果您希望表格增长,您确实需要选择第一选择。背后的原因是使用 where regexp 的查询不会使用索引。如您所知,索引是快速查询的关键。
如果您使用 InnoDB,请定义链接两个表的外键。

你说,你发现第一个选择比第二个有更多的冗余。在我看来不是。考虑到这一点,您的草图可能表明存在误解。它应该看起来像这样,即表 1 中每个 id 只有一行,因此没有冗余。

      Tbl1                Tbl2
+----+----------+   +----+-------+
| ID |Other cols|   | ID | Group |
+----+----------+   +----+-------+
| 1  |          |   | 1  |  gr1  |
| 2  |          |   | 1  |  gr2  |
+----+----------+   | 2  |  gr2  |
                    | 2  |  gr3  |
                    +----+-------+

关于mysql - 正则表达式与连接性能 Mysql,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20032343/

10-15 02:03