【mysql学习笔记】-索引
1.基本概念
1)索引的概念:是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据表中的特定信息。
2)索引的优点:提高查询,联合查询,分级和排序的时间;缺点:索引占空间,维护索引时需要耗费时间。
2.索引的底层实现
索引的底层有两种实现方式,一种是B树,另一种是哈希表。
1)B-Tree:B树是为磁盘或者其他直接存取的辅助存储设备而设计的一种平衡搜索树,B树类似于红黑树,不同之处在于B树的结点可以有很多个孩子结点。B树索引具有范围查找和前缀查找的能力,对于N个节点的B树,检索一条记录的复杂度为O(lgN)。
2)哈希表:哈希表只能做等于查找,但是无论对于多大的hash表,检索一条记录的复杂度都为O(1)。
显然,如果值的差异性大,并且以等于查找为主,hash索引时更高效的选择,它有O(1)的查找复杂度;如果值的差异性相对较差,并且以范围查找为主,B树是更好的选择,它支持范围查找。
3.索引的分类
1)普通索引:不加任何限制条件。
2)唯一性索引:不允许具有索引值相同的行,从而禁止重复的索引或键值,使用unique参数。
3)全文索引:使用fulltext参数,只能创建在char、varchar、text类型的字段上,只有MyISAM存储引擎支持全文索引。
4)单列索引:在一个字段上建立的普通索引,唯一索引或者全文索引。
5)多列索引:在多个字段上建立的普通索引,唯一索引或者全文索引。
6)空间索引:使用SPATIAL参数,只有MyISAM存储引擎支持空间索引,必须建立在空间数据类型上,且必须非空。
4.索引的创建和删除
1)创建索引:第一种:alter table table_name add index index_name(column_list);
例如:alter table orders add index id_index(cust_id);
第二种:create index index_name on table_name(column_list);
例如:create index id_index on orders (cust_id);
2)删除索引:drop index index_name on table_name;
例如:drop index id_index on orders;
5.多列索引的使用
在一个表的多列上建立索引后,查询的where条件中只有包含了索引的第一列才会使索引生效。
例如:在customers表中建立如下索引:alter table cstomers add indexunion_index(cust_city,cust_state);
在以下例子会使索引生效:select * from customers where cust_city =’Chicago’;
select * from customers where cust_city =’Chicago’ and cust_state = ‘IN’;
而这个例子则不会使索引生效:select * from customers where cust_state = ‘IN’;
还没有评论,来说两句吧...