索引
索引
索引相当于图书的目录,可以帮助用户快速的找到需要的内容.
数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍.
索引好处:可以提高查询效率,而且是数据量越大效果越明显.
索引缺点:添加数据和删除数据效率低
索引类型
1、HASH:
hash就是一种(key=>value)形式的键值对,允许多个key对应相同的value,但不允许一个key对应多个value,为某一列或几列建立hash索引,就会利用这一列或几列的值通过一定的算法计算出一个hash值,对应一行或几行数据. hash索引可以一次定位,不需要像树形索引那样逐层查找,因此具有极高的效率.
假设创建如下一个表:
CREATE TABLE testhash ( fname VARCHAR(50) NOT NULL, lname VARCHAR(50) NOT NULL, KEY USING HASH(fname) ) ENGINE=MEMORY;
包含的数据如下:
假设索引使用hash函数f( ),如下:
f('Arjen') = 2323 f('Baron') = 7437 f('Peter') = 8784 f('Vadim') = 2458
此时,索引的结构大概如下:
Slots是有序的,但是记录不是有序的。当你执行
mysql> SELECT lname FROM testhash WHERE fname='Peter';
MySQL会计算’Peter’的hash值,然后通过它来查询索引的行指针。因为f('Peter') = 8784,MySQL会在索引中查找8784,得到指向记录3的指针。
因为索引自己仅仅存储很短的值,所以,索引非常紧凑。Hash值不取决于列的数据类型,一个TINYINT列的索引与一个长字符串列的索引一样大。
2、BTREE
就是一种将索引值按一定的算法,存入一个树形的数据结构中. 如二叉树一样
索引分类:
1. 普通索引
2.唯一索引
3.主键索引
4.组合索引
5. FULLTEXT:全文索引
目前只有MyISAM引擎支持。而且只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引
FULLTEXT索引是按照分词原理建立索引的。西文中,大部分为字母文字,分词可以很方便的按照空格进行分割。但很明显,中文不能按照这种方式进行分词。那又怎么办呢?这个向大家介绍一个Mysql的中文分词插件Mysqlcft,有了它,就可以对中文进行分词,想了解的同学请移步Mysqlcft,当然还有其他的分词插件可以使用。
创建索引
1.创建 普通索引
1 CREATE UNIQUE index aaa on ren(p_age) 2 添加唯一索引 3 注意:unique index :表示唯一索引 aaa:表示索引的别名, on:表示给哪个表添加索引 ren:表名称,(添加索引的字段,多个字段以","间隔)
2.创建 唯一索引
1 CREATE UNIQUE index aaa on ren(p_age) 2 添加唯一索引 3 注意:unique index :表示唯一索引 aaa:表示索引的别名, on:表示给哪个表添加索引 ren:表名称,(添加索引的字段,多个字段以","间隔)
3.创建 主键索引
1 alter table 表名 add primary key(id); 2 添加之间索引 3 注意:主键索引只能有一个
4.创建 组合索引
1 create index id_name on ren (id,name) 2 添加组合索引 3 注意: 如上创建组合索引之后,查询: 4 id and name-- 使用索引 5 id -- 使用索引 6 name -- 不使用索引