使用MySQL索引的示例?

时间:2010-08-14 01:39:08

标签: sql mysql indexing

我正在阅读这个问题,关于这四个之间的区别:Differences between INDEX, PRIMARY, UNIQUE, FULLTEXT in MySQL?

但是,阅读之后,这对我来说都是非常抽象和模糊的。如果我有一些关于什么时候使用它的例子,也许这将有助于我更具体地理解它。

例如,我认为对于字段user_id,我们会使用索引UNIQUE,对吗?

3 个答案:

答案 0 :(得分:3)

主键本身不是索引 - 这是一个约束 主键唯一地标识所有其余的行 - 这意味着值必须是唯一的。主键通常由一列组成,但可以由多个列组成 - 多个列称为复合列....

唯一约束在MySQL中作为索引实现 - 它保证了相同的值在定义的列中不会出现多次。唯一约束/索引在主键列上是多余的,主键可以被视为同义词,但具有更大的含义。这些也支持复合材料......

在MySQL(和SQL Server)中,有两种类型的索引 - clustered and non-clustered。聚簇索引通常与主键关联,如果在CREATE TABLE语句中定义了主键,则会自动创建。但它不一定是 - 它是表格中最重要的索引,因此如果将其与不同列关联起来更为优化,那么应该检查更改。表只能有一个聚簇索引 - 其余是非聚簇索引。您必须定义索引的空间量取决于表引擎 - 1,000 for MyISAM and 767 for InnoDB。索引(非聚簇)用于加速数据检索,可以使用SELECT,JOIN,WHERE和ORDER BY子句中的列来触发它们的使用。但是由于维护了这些数据,它们也会降低INSERT / UPDATE / DELETE语句的速度。

全文索引明确用于全文搜索(FTS)功能 - 没有其他功能可以使用它们。它们仅适用于使用基于字符串的数据类型定义的列。

请注意,索引不是 ANSI - 相比之下,相似之处相对一致。 Oracle不区分索引 - 它们都是一样的。

答案 1 :(得分:2)

以下简要介绍了它们的用途以及何时使用它们:

  • INDEX:加快搜索此列中的值。
  • UNIQUE:当您想要将列限制为仅包含唯一值时。这也增加了一个索引。示例:如果您只希望每封电子邮件注册一次,则可以在电子邮件列中添加唯一约束。
  • PRIMARY KEY:包含每行的标识。主键还意味着唯一索引和“非空”约束。它通常是一个自动增量ID,但它也可以是一个自然键。为每个表创建主键通常是个好主意,尽管不是必需的。
  • FULL TEXT:这是一种特殊类型的索引,它允许您比LIKE'%foo%'快得多地执行文本字符串搜索。

请注意,我这里只考虑单列索引。也可以使用多列索引。

答案 2 :(得分:0)

如果你有一个带有id,姓名,电子邮件和生物信息的“人员”表......

  • 主键是id,也许它是一个数字,它总是唯一的,你可以用它作为其他表中的引用(外键)
  • 电子邮件在每个人身上都是唯一的,因此您可以在那里添加UNIQUE约束
  • 您可能希望不断搜索某个人的名字,以便在那里添加一个INDEX
  • 最后在bio属性中进行全文搜索,因为它可能对搜索有用

主键也是UNIQUE