设为首页 - 加入收藏 延边站长网 (http://www.0433zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: mini 系统 为什 为啥
当前位置: 首页 > 站长学院 > MySql教程 > 正文

面试官出的MySQL索引问题,这篇文章全给你解决!

发布时间:2019-10-17 12:09 所属栏目:[MySql教程] 来源:欧阳思海
导读:0 前言 这篇文章不会讲解索引的基础知识,主要是关于MySQL数据库的B+树索引的相关原理,里面的一些知识都参考了MySQL技术内幕这本书,也算对于这些知识的总结。对于B树和B+树相关的知识,可以参考我的这篇博客:面试官问你B树和B+树,就把这篇文章丢给他 1

?面试官出的MySQL索引问题,这篇文章全给你解决!

0 前言

这篇文章不会讲解索引的基础知识,主要是关于MySQL数据库的B+树索引的相关原理,里面的一些知识都参考了MySQL技术内幕这本书,也算对于这些知识的总结。对于B树和B+树相关的知识,可以参考我的这篇博客:面试官问你B树和B+树,就把这篇文章丢给他

1 索引的管理

索引有很多中类型:普通索引、唯一索引、主键索引、组合索引、全文索引,下面我们看看如何创建和删除下面这些类型的索引。

1.1 索引的创建方式

索引的创建是可以在很多种情况下进行的。

  • ?直接创建索引
  1. CREATE?[UNIQUE|FULLLTEXT]?INDEX?index_name?ON?table_name(column_name(length))?

[UNIQUE|FULLLTEXT]:表示可选择的索引类型,唯一索引还是全文索引,不加话就是普通索引。

table_name:表的名称,表示为哪个表添加索引。

column_name(length):column_name是表的列名,length表示为这一列的前length行记录添加索引。

  • ?修改表结构的方式添加索引?
  1. ALTER?TABLE?table_name?ADD?[UNIQUE|FULLLTEXT]?INDEX?index_name?(column(length))?
  • ?创建表的时候同时创建索引?
  1. CREATE?TABLE?`table`?(??
  2. ????`id`?int(11)?NOT?NULL?AUTO_INCREMENT?,??
  3. ????`title`?char(255)?CHARACTER?NOT?NULL?,??
  4. ????PRIMARY?KEY?(`id`),??
  5. ????[UNIQUE|FULLLTEXT]?INDEX?index_name?(title(length))??
  6. )?

1.2 主键索引和组合索引创建的方式

前面讲的都是普通索引、唯一索引和全文索引创建的方式,但是,主键索引和组合索引创建的方式却是有点不一样的,所以单独拿出来讲一下。

组合索引创建方式

  • ?创建表的时候同时创建索引?
  1. CREATE?TABLE?`table`?(??
  2. ????`id`?int(11)?NOT?NULL?AUTO_INCREMENT?,??
  3. ????`title`?char(255)?CHARACTER?NOT?NULL?,??
  4. ????PRIMARY?KEY?(`id`),??
  5. ????INDEX?index_name(id,title)??
  6. )?
  • ?修改表结构的方式添加索引?
  1. ALTER?TABLE?table_name?ADD?INDEX?name_city_age?(name,city,age);?

主键索引创建方式

主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。

  1. CREATE?TABLE?`table`?(??
  2. ????`id`?int(11)?NOT?NULL?AUTO_INCREMENT?,??
  3. ????`title`?char(255)?CHARACTER?NOT?NULL?,??
  4. ????PRIMARY?KEY?(`id`)??
  5. )?

1.3 删除索引

删除索引可利用ALTER TABLE或DROP INDEX语句来删除索引。类似于CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下。

(1)DROP INDEX index_name ON talbe_name

(2)ALTER TABLE table_name DROP INDEX index_name

(3)ALTER TABLE table_name DROP PRIMARY KEY

第3条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。

1.4 索引实例

上面讲了一下基本的知识,接下来,还是通过一个具体的例子来体会一下。

  • ?step1:创建表?
  1. ?create?table?table_index(??
  2. ????id?int(11)?not?null?auto_increment,??
  3. ????title?char(255)?not?null,??
  4. ????primary?key(id)??
  5. );?
  • ?step2:添加索引

首先,我们使用直接添加索引的方式添加一个普通索引。

  1. CREATE?INDEX?idx_a?ON?table_index(title);?

接着,我们用修改表结构的时候添加索引。

  1. ALTER?TABLE?table_index?ADD?UNIQUE?INDEX?idx_b?(title(100));?

最后,我们再添加一个组合索引。

  1. ALTER?TABLE?table_index?ADD?INDEX?idx_id_title?(id,title);?

这样,我们就把前面索引的方式都用上一遍了,我相信你也熟悉这些操作了。

  • ?step3:使用SHOW INDEX命令查看索引信息

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章