MySQL中索引与算法

MYSQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。
在使用like的时候,如果使用‘%%’,会不会用到索引呢?

EXPLAIN SELECT * FROM `user` WHERE username LIKE 'ptd_%';

综上,mysql在使用like查询的时候只有使用后面的%时,才会使用到索引。

INDEX:普通的索引。
PRIMARY 主键:唯一且不能为空。
UNIQUE 唯一索引:不允许有重复。
FULLTEXT 全文索引:用于在一篇文章中,检索文本信息的。

MYSQL的索引类型:INDEX,PRIMARY, UNIQUE,FULLTEXT有什么区别?各适用于什么场合?
举个例子来说,比如你在为某商场做一个会员卡的系统。
这个系统有一个会员表
有下列字段:
会员编号 INT
会员姓名 VARCHAR(10)
会员身份证号码 VARCHAR(18)
会员电话 VARCHAR(10)
会员住址 VARCHAR(50)
会员备注信息 TEXT

那么这个 会员编号,作为主键,使用 PRIMARY
会员姓名 如果要建索引的话,那么就是普通的 INDEX
会员身份证号码 如果要建索引的话,那么可以选择 UNIQUE (唯一的,不允许重复)
会员备注信息 , 如果需要建索引的话,可以选择 FULLTEXT,全文搜索。
不过 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。
用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT。全文索引可以在CHAR、VARCHAR或者TEXT类型的列上创建。
它可以通过CREATE TABLE命令创建,也可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建
全文索引要比把记录插入带有全文索引的空表更快。

我们在MySQL中常用两种索引算法BTree和Hash,两种算法检索方式不一样,对查询的作用也不一样。
BTree索引是最常用的mysql数据库索引算法,因为它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符,只要它的查询条件是一个不以通配符开头的常量。

Hash索引只能用于对等比较,例如“=”,“IN”,“<=>”(等价于=)操作符。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTree索引,但Hash索引仅仅能满足“=”,“IN”,“<=>”查询,不能使用范围查询。
更多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章