登峰造极境

  • WIN
    • CSharp
    • JAVA
    • OAM
    • DirectX
    • Emgucv
  • UNIX
    • FFmpeg
    • QT
    • Python
    • Opencv
    • Openwrt
    • Twisted
    • Design Patterns
    • Mysql
    • Mycat
    • MariaDB
    • Make
    • OAM
    • Supervisor
    • Nginx
    • KVM
    • Docker
    • OpenStack
  • WEB
    • ASP
    • Node.js
    • PHP
    • Directadmin
    • Openssl
    • Regex
  • APP
    • Android
  • AI
    • Algorithm
    • Deep Learning
    • Machine Learning
  • IOT
    • Device
    • MSP430
  • DIY
    • Algorithm
    • Design Patterns
    • MATH
    • X98 AIR 3G
    • Tucao
    • fun
  • LIFE
    • 美食
    • 关于我
  • LINKS
  • ME
Claves
长风破浪会有时,直挂云帆济沧海
  1. 首页
  2. Platforms
  3. LINUX
  4. Mysql
  5. 正文

Mysql学习笔记-索引

2016-01-22

参考书籍:Mysql核心技术与最佳实践 /孔祥盛编著. -北京:人民邮电出版社,2014.5 ISBN 978-7-115-33769-6

一、概念

类似《新华字典》,biang也[不]会在其中。“音节表:按照a->z顺序排序,因此读者可以很快找到biang字的页数。

1、索引的本质

索引其实是数据库表中字段值的复制,该字段称为索引的关键字。

2、Mysql数据库中,数据是如何检索的?

Mysql在检索表中数据时,先按照索引“关键字”的值在索引中进行查找,如果能查到,则直接定位到数据所在的起始页;如果没有查到,只能全表扫描查找数据。

3、一个数据表可以创建多个索引

4、前缀索引

索引中关键字的值可以是索引“关键字”字段值的一部分,这种索引称为前缀索引。

5、索引必须来自同一张表,关键字值必须是表中相应字段值拷贝。为了提高效率,需要对索引的关键字排序。

6、不能跨表创建索引

7、索引经排序后存放在外存文件中

8、由于表主键不会重复,所以主键做索引是最合适的。

对于MyISAM表:

mysql会自动将表中所有记录主键值的“备份”及每条记录所在起始页编入索引,形成一张“索引表”并存入外存,这种索引也称为“主索引”(primary index)。MyISAM表的MYI索引文件与MYD数据文件位于两个文件,通过MYI索引文件中的“表记录指针”可以找到MYD数据文件中表记录所在的物理地址。

对于InnoDB表:

“主索引”与MyISAM表主索引不同。InnoDB表“主索引”关键字顺序必须与InnoDB表记录主键值顺序一致,这种“主索引”称为“聚簇索引”。对于InnoDB表,必须有且仅一个聚簇索引。其表记录和索引位于同一个表空间文件,聚簇索引就是InnoDB表。非聚簇索引统称为“辅助索引”,“辅助索引”表记录称为书签,实际上是主键值。

9、索引与数据结构关系

索引通常使用平衡树(btree)或哈希表等复杂的数据结构。

10、索引是冗余数据,并非越多越好。

二、关键字选取原则

1、字段值离散程度越高越适合

2、占用存储空间少的字段更适合

3、固定存储空间的字段更适合

4、where子句经常使用的应该创建索引,分组字段、排序字段应该创建索引。

5、更新频繁的字段不适合创建索引

6、最左前缀原则

7、尽量使用前缀索引

三、索引与约束

主键约束、唯一性约束、外键约束与索引的联系较为紧密。

约束用于保证数据逻辑操作完整性,索引则是将关键字以某种结构存于外存,提升检索性能。

主键约束、唯一性约束、外键约束是基于索引实现的。因此创建主键约束时,会自动创建一个主索引,且主索引与主键约束名相同(PRIMARY);创建唯一性约束时,会自动创建唯一性索引,索引名与唯一性约束名相同;外键约束也一样。

当然,删除唯一性索引,对应的唯一性 约束也将自动删除。

四、创建索引

1、方法一:创建表同时创建索引

create table 表名(
字段名 数据类型 [约束条件]
...
[其它约束条件]
...
[unique |fulltext] index 索引名  (字段名[(长度)] [asc | desc])
)engine = 存储引擎类型 default chaset =字符集类型

 

2、方法二:在已有表上创建索引

create [unique |fulltext] index 索引名 on 表名 (字段名[(长度)] [asc | desc])
alter table 表名 add [unique |fulltext] index 索引名  (字段名[(长度)] [asc | desc])

三、删除索引

drop index 索引名 on 表名

 

标签: 暂无
最后更新:2016-01-25

代号山岳

知之为知之 不知为不知

点赞
< 上一篇
下一篇 >

COPYRIGHT © 2099 登峰造极境. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备14031139号-5

川公网安备51012202000587号