我最近一直在尝试使用 SQL EXPLAIN
,而且 PK Possible Keys
和 K Key
有点奇怪,
例如,我得到以下行
[id - select_type - table - type - possible_keys - key - key_len - ref - rows - Extra]
[1 - PRIMARY - users - const - PRIMARY, username - username - 66 - const - 1 - using index; using temporary; using filesort]
据我所知,我必须选择PRIMARY
和用户名
作为多个索引
,但我只能有一个PRIMARY
表中的 id
键,那么 PK
会向我显示我应该选择其中一个的键吗?
最佳答案
您并不是“选择一个索引”来在查询中使用;而是“选择一个索引”。优化器选择。
主键
(PK) 中可以包含一列或多列。一张表只能有一个PK。每张 table 都应该有一个PK。
“辅助 key ”是除 PK 之外的任何索引。它也可以有一个或多个列。
优化器几乎从不为单个 SELECT
使用多个索引(PK 或某些辅助索引)。
“可能的键”是优化器认为可能有效的键。经过进一步分析,它决定使用哪一个,并在“key”列中声明它。在您的示例中,优化器认为 INDEX "username"(...)
比 PRIMARY KEY(...)
效果更好。
我不清楚你期望的“多重索引”是什么意思......
- 可以有多个索引;但优化器不太可能使用多个。
- 一个索引中可能包含多个列。
- 一个表可以有多个索引。
优化器有一个后备方案:只需扫描整个表(不触及任何索引)。
如果您想进一步讨论 EXPLAIN
,请向我们展示 SELECT
和 EXPLAIN
。并且展示不止一对,这样我们就可以“比较和对比”。
关于mysql - 在SQL EXPLAIN中,可能的键和键,我选择PK之一还是全部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48026718/