sql - 如何使用 MySQL 索引列?

标签 sql mysql indexing foreign-keys primary-key

你什么时候使用每种 MySQL 索引类型?

  • PRIMARY - 主键列?
  • 唯一 - 外键?
  • 索引 - ??

对于非常大的表,索引列会提高性能吗?

最佳答案

初级

主键,顾名思义,就是一个表的主键,应该是一个列,通常用来选择这个表的行。主键始终是唯一键(唯一标识符)。主键不限于一列,例如在引用表(多对多)中,主键包含两列或更多列通常是有意义的。

独一无二

唯一索引可确保您的 DBMS 不接受此列的重复条目。你问'外键?不!这不会有用,因为根据定义,外键很容易重复(一对多、多对多)。

索引

附加索引可以放置在经常用于 SELECTS(和 JOINS)的列上,这通常用于外键。在许多情况下,如果外键被索引,则 SELECT(和 JOIN)查询会更快。

但是请注意——正如 SquareCog 所阐明的那样——索引会根据对数据的任何修改进行更新,所以是的,添加更多索引会导致 INSERT/UPDATE 性能下降。如果索引没有得到更新,您将获得不同的信息,具体取决于优化器决定是在索引上还是在原始表上运行查询——这是一种非常不受欢迎的情况。

这意味着,您应该仔细评估索引的使用情况。基于此可以确定一件事:必须避免使用未使用的索引,resp。已删除!

关于sql - 如何使用 MySQL 索引列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1517303/

相关文章:

mysql - 获取每个对话的收件人 ID

java - HQL:查找子对象包含特定属性值的对象

mysql - 数据库中的数据库(表设计)

mysql - 在我的 RAILS 应用程序中将 2 个 SELECT 合并为一个 SELECT

sql-server - 组合索引与多个单一索引与全文索引的查询性能

sql - 按位置、客户名称和月份对查询结果进行分组

MySQL 错误 1005 : Can't create table (errno: 150)

php - 如何使用 codeigniter 存储图像并从文件夹中检索图像?

python - 如何在Python的bulks框架中为neo4j创建选择性全文索引?

elasticsearch - 索引创建成功,但不会重新索引新数据