小编Pas*_*aso的帖子

MySQL不使用带JOIN,WHERE和ORDER的索引

我们有两个类似于简单标记记录结构的表格如下(实际上它要复杂得多,但这是问题的本质):

tag (A.a) | recordId (A.b)
1         | 1
2         | 1
2         | 2
3         | 2
....
Run Code Online (Sandbox Code Playgroud)

recordId (B.b) | recordData (B.c)
1              | 123
2              | 666
3              | 1246
Run Code Online (Sandbox Code Playgroud)

问题是获取具有特定标记的有序记录.显而易见的方法是使用简单的连接和索引(PK)(Aa,Ab),(Ab),(PK)(Bb),(Bb,Bc),如下所示:

select A.a, A.b, B.c from A join B on A.b = B.b where a = 44 order by c;
Run Code Online (Sandbox Code Playgroud)

但是,这会给文件排序带来不愉快的结果:

+----+-------------+-------+------+---------------+---------+---------+-----------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key     | key_len | ref       | rows | Extra                                        |
+----+-------------+-------+------+---------------+---------+---------+-----------+------+----------------------------------------------+
|  1 …
Run Code Online (Sandbox Code Playgroud)

mysql indexing join materialized-views sql-order-by

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

indexing ×1

join ×1

materialized-views ×1

mysql ×1

sql-order-by ×1