我最近开始开发使用SQL数据库的第一个严肃的应用程序,并且正在使用phpMyAdmin设置表。我可以给几个专栏提供几个可选的“功能”,但我不确定它们的作用:
我知道PK的用途以及如何使用它,但是我想我的问题是为什么一个人需要一个PK-它与仅将列设置为“Unique”有什么不同,除了您可以只有一个PK?仅仅是让程序员知道该值可以唯一地标识记录吗?还是也有一些特殊的属性?
我不知道“索引”的作用-实际上,我见过的唯一一次使用(1)我的主键似乎已被索引,并且(2)我听说索引在某种程度上与性能有关;您想要索引的列,但不要太多。如何确定要索引的列,以及它的作用是什么?
编辑:应该一个索引列可能要ORDER BY吗?
非常感谢,
马拉
最佳答案
主键通常用于为您的记录创建数字“id”,并且此id列会自动递增。
例如,如果您有一个带有books
字段的id
表,其中id
是主键,并且还设置为auto_increment
(在phpmyadmin中为'Extra'下),那么当您首次向该表中添加书籍时,该ID将变为1'。下本书的ID将自动为“2”,依此类推。通常,每个表应至少具有一个主键,以帮助轻松地识别和查找记录。
当您需要定期从表中检索某些信息时,将使用索引。例如,如果您有一个users
表,并且需要大量访问email
列,则可以在电子邮件上添加索引,这将使查询访问电子邮件的查询更快。
但是,添加不必要的索引也有缺点,因此,仅在确实需要比其他列更需要访问的列上添加此索引。例如,随着索引的增加,UPDATE
,DELETE
和INSERT
查询会稍微慢一些,因为MySQL需要为每个索引列存储额外的信息。可以在this page上找到更多信息。
编辑:是的,很多需要在ORDER BY
中使用的列应该具有索引,以及在WHERE
中使用的那些列。
关于sql - SQL:主键和索引到底做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1315481/