我最近开始开发我的第一个使用SQL数据库的认真应用程序,我正在使用phpMyAdmin来设置表.有几个可选的"功能",我可以提供各种列,我不完全确定他们做了什么:
我知道PK是什么以及如何使用它,但我想我的问题就是为什么需要一个 - 如何将列设置为"Unique",除了你可以只有一个PK?只是让程序员知道这个值唯一地标识记录吗?或者它也有一些特殊属性?
我不知道"索引"是做什么的 - 实际上,我见过它的唯一时间是(1)我的主键似乎被索引了,(2)我听说索引与性能有某种关系; 你想要索引列,但不是太多.如何确定索引哪些列,以及它究竟做了什么?
编辑:如果一个索引colums一个可能想要ORDER BY?
非常感谢,
马拉
Cli*_*ote 27
主键通常用于为记录创建数字"id",此id列会自动递增.
例如,如果你有一个books带有id字段的表,其中id是主键并且也设置为auto_increment(在phpmyadmin中的'Extra),那么当你第一次向表中添加一本书时,它的id将变为1' .下一本书的ID将自动为"2",依此类推.通常,每个表应至少有一个主键,以帮助轻松识别和查找记录.
当您需要定期从表中检索某些信息时,将使用索引.例如,如果您有一个users表,并且您需要经常访问该email列,那么您可以在电子邮件中添加索引,这将使访问该电子邮件的查询更快.
但是,添加不必要的索引也存在缺点,因此仅在真正需要访问的列上添加此项而不是其他索引.例如,由于MySQL需要为每个索引列存储额外信息UPDATE,DELETE因此INSERT查询的索引会越慢.更多信息可以在这个页面找到.
编辑:是的,需要在ORDER BY批次中使用的列应该有索引,以及索引中使用的索引WHERE.
主键基本上是一个唯一的索引列,充当该表中行的"官方"ID.最重要的是,它通常用于外键关系,即如果另一个表引用第一行中的行,则它将包含该行主键的副本.
请注意,可以使用复合主键,即包含多个列的复合主键.
索引可以改善查找时间.它们通常是基于树的,因此通过索引查找某一行需要O(log(n))时间,而不是扫描整个表.
通常,在被频繁用于一个大的表中的任何列WHERE,ORDER BY或(特别是)JOIN条款应该有一个索引.由于指数需求埃维进行更新INSERT,UPDATE或者DELETE,它会减慢这些操作.如果您的写入次数很少且读取次数很多,那么请将您的内容编入索引.如果你有很多写入和大量的查询需要在许多列上的索引,那么你有一个很大的问题.
主键和唯一键之间的区别最好通过一个示例来解释.
我们有一个用户表:
USER_ID number
NAME varchar(30)
EMAIL varchar(50)
Run Code Online (Sandbox Code Playgroud)
在该表中,USER_ID是主键.NAME并不是独一无二的 - 世界上有很多John Smiths和Muhammed Khans.EMAIL必然是唯一的,否则全球电子邮件系统将无法运作.所以我们对EMAIL设置了一个独特的约束.
为什么我们需要一个单独的主键?三个原因:
| 归档时间: |
|
| 查看次数: |
36547 次 |
| 最近记录: |