一尘不染

带“列表”条目的SQL表与带每个条目一行的SQL表

mysql

我有一张Sqlite表格,其中每一行都是以下形式:

value, "a,b,c,d,e,f,g,h,i,j", value3, value4

凡我查询寻找的价值配对,%b%使用LIKE。就查询时间而言,改为使用一个表(其中每行是一个排列)是否更有效:

value, a, value3, value4
...
value, j, value3, value4

这样,我这次使用=运算符查询了值b。

值得注意的是,我感兴趣的用例当前有大约10,000行,其中每个“列表”元素平均有8个条目。我同时标记了两者SqliteMySQL因为使用MySQL和的数据库都存在类似的问题Sqlite


阅读 213

收藏
2020-05-17

共1个答案

一尘不染

我的查询在其中使用LIKE寻找一对值,%b%。就查询时间而言,改为使用一个表(其中每行是一个排列)是否更有效:

明确地。因为LIKE’%something%’类型查询不能使用index。因此,您的查找将会非常缓慢。如果这还不够,那么您将使用RDBMS反模式。这里有更多详细信息:在数据库列中存储定界列表真的那么糟糕吗?

将“ CSV”列分为不同的列后,您可以通过规范化数据库来进一步扩展它。

2020-05-17