一、索引的种类
mysql索引主要分为两大类:单列索引、组合索引 单列索引: 一个索引只包含一个列,一个表可以有多个单列索引。 其中单列索引又可以分为:主键索引、唯一索引、普通索引 普通索引: 最基本的索引,值可以不唯一,允许有空值。 唯一索引: 唯一所以要求所有列的值是唯一的,允许有空值。 主键索引: 所有列的值是唯一的,不允许有空值。 组合索引: 一个索引可以包含两个或者两个以上的列。
二、索引的实现原理
索引的底层使用的是B+树的数据结构; 为何不用其他数据结构? 1、使用二叉树,如果使用自增索引,会导致二叉树不平衡,从而使数据结构类似于链表,每次查找数据都要全盘扫描,使效率降低; 2、使用红黑树(即二叉平衡树),会导致树的高度特别高,查询效率也会降低; 3、B+树是B树的升级版,使树的高度变低; B树: 把节点搂到内存里,然后挨个节点比对;先从跟节点开始,例如 查找49,15-56之间中间有指针,然后向下寻找; B+树: 与B树的不同的是,只有子节点有date(索引文件行所在磁盘指针),且子节点包含所有数据,每个子节点之间有双向的指针(图片画的单向的)。
- 聚集索引底层数据结构: 子节点存储了完整的数据结构;
使用整型比较大小比较快,所以推荐使用整型;整型存储空间小;
- 非聚集索引底层数据结构: 子节点只存储指针,指向索引的行;
三、创建索引注意事项
1、最好使用联合索引; 2、如果创建表的时候不创建索引,DB会自动找一个自增不重复的字段当索引; 3、索引最好是自增的整型; 4、索引并不是越多越好,索引会提高数据访问速度,但增加了删除、插入、更新的时间。 5、索引创建时,应该考虑经常作为查询条件或者要求排序的字段作为索引。 6、经常出现在关键字order by、group by、distinct后面的字段,建立索引; 7、在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构;
四、如何创建索引
普通索引创建格式:
CREATE INDEX IndexName ON `TableName`(`字段名`(length)) 或者 ALTER TABLE TableName ADD INDEX IndexName(`字段名`(length))例如:
CREATE INDEX account_Index ON `pay_accounting`(`account`); ALTER TABLE pay_accounting ADD INDEX account_Index(`account`)主键索引:
CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));唯一索引:
CREATE UNIQUE INDEX IndexName ON `TableName`(`字段名`(length));或者 ALTER TABLE TableName ADD UNIQUE (column_list) 例如:
CREATE UNIQUE INDEX account_UNIQUE_Index ON `pay_accounting`(`account`);组合索引:
CREATE INDEX IndexName On `TableName`(`字段名`(length),`字段名`(length),...);例如:
CREATE INDEX nickname_account_createdTime_Index ON `award`(`nickname`, `account`, `created_time`);需要了解更多数据库技术:MySql数据库学习(三)索引,都可以关注数据库技术分享栏目—编程笔记