mysql - 在SQL EXPLAIN中,可能的键和键,我选择PK之一还是全部?

标签 mysql sql mariadb

我最近一直在尝试使用 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,请向我们展示 SELECTEXPLAIN。并且展示不止一对,这样我们就可以“比较和对比”。

关于mysql - 在SQL EXPLAIN中,可能的键和键,我选择PK之一还是全部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48026718/

相关文章:

mysql - 如何在MySQL中获取具有foreignKey值相关数据的所有表

ubuntu - wsl 2 ubuntu mariadb .my.cnf.42' 被忽略

php - MySQL - 计算行之间的差异

php - 需要 PHP 脚本的简单 Hello World Zend 框架

sql - Oracle Sql中 "!="和 "<>"有什么区别吗?

javascript - PHP/MySQL :Rank users by clicks

c# - 从 varbinary case sql server c# 中读取图像

mysql - 从连接返回表中的最新行

mysql - SQL检查两个表

php - Codeigniter 查询获取缓存结果(选择未更新的查询结果)