索引

索引


索引相当于图书的目录,可以帮助用户快速的找到需要的内容.
数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍.

索引好处:可以提高查询效率,而且是数据量越大效果越明显.
索引缺点:添加数据和删除数据效率低

索引类型

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           -- 不使用索引

 

posted @ 2017-11-09 19:51  静静别跑  阅读(124)  评论(0编辑  收藏  举报