首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MySQL索引列?

如何使用MySQL索引列?
EN

Stack Overflow用户
提问于 2009-10-04 20:30:20
回答 5查看 10.5K关注 0票数 14

何时使用每个MySQL索引类型?

columns?

  • UNIQUE -
  • 主键-外键?
  • 索引??

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-04 20:40:08

主要的

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

独一无二

唯一的索引确保DBMS不接受此列的重复条目。你问“外键?”不是的!这是没有用的,因为外键在定义中很容易被重复(一对多,多对多)。

索引

其他索引可以放置在列上,这些列通常用于选择(和联接),这通常是外键的情况。在许多情况下,如果索引外键,SELECT (和JOIN)查询将更快。

但是请注意--正如SquareCog所阐明的--索引在对数据的任何修改中都会被更新,所以是的,添加更多的索引会导致INSERT/UPDATE性能的下降。如果索引没有更新,您将得到不同的信息,这取决于优化器是否决定在索引或原始表上运行查询--这是一种非常不理想的情况。

这意味着,您应该仔细评估索引的使用情况。在此基础上,有一件事是肯定的:必须避免未使用的指数。移除

票数 20
EN

Stack Overflow用户

发布于 2009-10-04 20:52:32

我对MySQL并不那么熟悉,但是我相信在大多数数据库服务器中,以下内容都是正确的。索引是一种平衡树,用于允许数据库扫描表中给定的数据。例如,假设您有下表。

代码语言:javascript
复制
CREATE TABLE person (
    id    SERIAL,
    name  VARCHAR(20),
    dob   VARCHAR(20)
);

如果您在“name”字段上创建了一个索引,这将在“名称”列的表中为该数据创建一个平衡树。平衡的树数据结构允许更快地搜索结果(请参阅http://www.solutionhacker.com/tag/balanced-tree/)。

但是,您应该注意,索引列只允许您搜索存储在数据库中的数据。例如:

这将无法对索引进行搜索,而是对表进行顺序扫描,在表中的每个列上调用UPPER():name行。

代码语言:javascript
复制
select *
from person
where UPPER(name) = "BOB";

这也会产生以下效果,因为索引将从第一个字母开始排序。但是,将搜索词替换为"%B“将使用索引。

代码语言:javascript
复制
select *
from person
where name like "%B"
票数 3
EN

Stack Overflow用户

发布于 2009-10-04 20:39:23

索引将提高大型表的性能。通常,主键有一个基于键的索引。通常是独一无二的。

将索引添加到用于搜索很多内容的字段(如街道名称或姓氏)中是很有用的,因为它将再次提高性能。不需要是独一无二的。

外键和唯一键更多的是为了保持数据的完整性。这样,您就不能拥有重复的主键,并且您的子表没有已被删除的父表的数据。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1517303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档