mysql - 什么决定是否为 SQL 列编写 MUL

标签 mysql

<分区>

如果我运行 SHOW COLUMNS FROM table_name 我得到:

+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| convo_id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| client_convo_id | varchar(255) | NO   |     | NULL    |                |
| user_id         | int(11)      | NO   | MUL | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

Key这一列,就很清楚PRI是什么意思,即主键。 MUL,根据我的研究,代表多个,这意味着我可以在这个表中有相同 user_id 的多个实例。但是 client_convo_id 字段呢?它在 Key 列中没有值。这是什么意思?我怀疑表中可能有多个条目具有相同的 client_convo_id。那么,为什么 client_convo_idKey 列中没有 MUL

最佳答案

MUL 表示该字段是非唯一索引的一部分,如此处回答: Another question

client_convo_id 的键列中没有任何内容,因为该字段没有附加索引。

并非 SQL 中的所有列都有索引。通常只有一个用于选择(在 where 或 join 子句中)的索引被索引,因此查询运行得更快。这是 official documentation关于这件事。

关于mysql - 什么决定是否为 SQL 列编写 MUL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791953/

相关文章:

Mysql 索引和连接

mysql - 无法在使用 Laravel 迁移创建的 PHPMyAdmin 中看到外键

java - PreparedStatement 不添加参数

php - 使用 mysql 连接查询努力获取月份名称

c++ - 如何将一个简单的 QSqlQueryModel 从一个类返回到另一个类?

MySQL 将旧行修剪为每天 1 行

mysql - SQL 创建唯一值标志

mysql - 旧版 MySQL 数据库的 Rails 3 : ActiveRecord vs. DataMapper(对比???)

mysql - 三个连接表的 SELECT 查询

Java/GWT/MySQL : connection refused?