MySQL---索引
一、索引介绍索引是帮助MySQL高效获取数据的数据结构。我们知道最基本的数据查找方式是顺序查找,这种算法的复杂度为O(n),性能很低。性能比较高的数据查找算法有:二分查找、二叉树查找。但二分查找算法要求被查找的数据是有序的,数据库中的数据不可能满足这种要求。二叉树查找只能应用于二叉树这种特定数据结构上面。MySQL数据库为了满足这些高级的查找算法,在保存数据之外,数据库还维护着满足这些高级算法
一、索引介绍
索引是帮助MySQL高效获取数据的数据结构。我们知道最基本的数据查找方式是顺序查找,这种算法的复杂度为O(n),性能很低。性能比较高的数据查找算法有:二分查找、二叉树查找。但二分查找算法要求被查找的数据是有序的,数据库中的数据不可能满足这种要求。二叉树查找只能应用于二叉树这种特定数据结构上面。MySQL数据库为了满足这些高级的查找算法,在保存数据之外,数据库还维护着满足这些高级算法的数据结构,我们称这种数据结构为索引。
目前大部分的数据库系统都采用B-Tree或B+Tree作为索引结构。而MySQL普遍采用B+Tree作为索引结构。
二、索引分类
MySQL索引有如下几类:普通索引、唯一索引、主键索引、组合索引、全文索引。
各种索引的特点如下:
索引名称 | 特点 |
普通索引 | 无任何限制 |
唯一索引 | 索引列必须唯一,但允许有NULL值 |
主键索引 | 索引列必须唯一,且不允许有NULL值 |
组合索引 | 组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到 |
全文索引 | 根据词频进行全文搜索,使用不当会严重影响性能 |
三、语法
3.1 创建索引
创建索引的方式有3种,下面以创建普通索引为例分别介绍3种方式:
CREATE INDEX indexName ON mytable(username(length)); ALTER mytable ADD INDEX indexName ON (username(length)); CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
唯一索引的创建方式和普通索引类似,如:
ALTER mytable ADD UNIQUE indexName ON (username(length))
组合索引
ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);
注意:组合索引的第一个字段必须出现在查询条件中,否则组合索引不会被用到。
3.2 删除索引
DROP INDEX indexName ON mytable;
3.3 查看索引
SHOW INDEX FROM myTable;
四、索引创建时机
虽然索引可以加快查询的速度,但索引也是有代价的。索引本身要消耗存储空间,同时索引会影响数据插入、删除、修改的时间,而且MySQL在运行时也要消耗资源去维护索引。因此索引并不是越多越好。
有2种情况下是不适合创建索引的:
- 表记录比较少,如表中只有几千条数据,则完全没必要创建索引。
- 选择性较低。通俗的讲就是表中非重复数据的占比较低,如果某列中的大多都是重复数据,则也没必要建立索引。一般采用如下的SQL语句进行计算。
SELECT count(DISTINCT(title))/count(*) AS Selectivity FROM employees.titles;
更多推荐
所有评论(0)