直接进入代码。
用户表
+----+------------------+
| id | username |
+----+------------------+
| 1 | becker.cornelius |
| 2 | claudine29 |
| 3 | dion37 |
| 4 | zkozey |
| 5 | kasandra59 |
+----+------------------+
列出表格
+----+---------------------------+
| id | name |
+----+---------------------------+
| 1 | List 1 |
| 2 | List 2 |
| 3 | List 3 |
| 4 | List 4 |
| 5 | List 5 |
+----+---------------------------+
lists_data table
+-----+---------+----------------------------------------------------------------+
| id | list_id | user_id |
+-----+---------+----------------------------------------------------------------+
| 421 | 4 | 1,2,3,503433,707152,603114,342531,414463,977165 |
+-----+---------+----------------------------------------------------------------+
data
colum我包含100万用户。以下是我的代码
select users.id, email, mobilenumber, firstname, surname, created_at
from users
inner join lists_data on find_in_set(users.id,lists_data.user_id) > 0 where lists_data.list_id = 97
以上代码正常,只有问题很慢,我不能使用分页,</ p>
我尝试了很多方法。他们都没有像预期的那样工作。
BTW,我无法规范化lists_data表,因为它可能包含每个列表数百万条记录。
答案 0 :(得分:0)
您对关系数据库使用了错误的数据结构。您的lists_data
表格应包含list_id
和user_id
(单数)的列。示例行将是多行:
id list_id user_id
1 97 1
2 97 2
3 97 3
4 97 503433
. . .
这称为联结表。而且,虽然更大,但SQL发现使用这些表格要简单得多。