百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql索引介绍
分享文章到:

mysql索引介绍

发布时间:09/01 来源:未知 浏览: 关键词:

什么是索引?

索引是一种高效猎取数据的数据构造。

索引的类型

FULLTEXT,(HASH,BTREE[mysql主要使用的两种]),RTREE。

1、FULLTEXT

即为全文索引,当前只要MyISAM引擎支撑。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不外当前只要 CHAR、VARCHAR ,TEXT 列上可以创立全文索引。

全文索引并不是和MyISAM一起产生的,它的显现是为理解决WHERE name LIKE “%word%"这类针对文本的含糊查询效力较低的问题。

(免费学习视频教程引荐:mysql视频教程)

2、HASH
由于HASH的独一(几乎100%的独一)及相似键值对的情势,很适合作为索引。

HASH索引可以一次定位,不需要像树形索引那样逐层查寻,因此具有极高的效力。但是,这种高效是有前提的,即只在“=”和“in”前提下高效,关于范畴查询、排序及组合索引依然效力不高。

3、BTREE

BTREE索引就是一种将索引值按必然的算法,存入一个树形的数据构造中(二叉树),每次查询都是从树的入口root开端,顺次遍历node,猎取leaf。这是MySQL里默许和最常用的索引类型。

4、RTREE

RTREE在MySQL很少使用,仅支撑geometry数据类型,支撑该类型的储备引擎只要MyISAM、BDb、InnoDb、NDb、Archive几种。

相关于BTREE,RTREE的优势在于范畴查寻。

索引品种

一般索引:仅加快查询

独一索引:加快查询 + 列值独一(可以有null)

主键索引:加快查询 + 列值独一(不成以有null)+ 表中只要一个

组合索引:多列值组成一个索引,专门用于组合搜索,其效力大于索引合并

全文索引:对文本的内容停止分词,停止搜索

索引使用

1、创立索引

1 --创立一般索引CREATE INDEX index_name ON table_name(col_name);
2 --创立独一索引CREATE UNIQUE INDEX index_name ON table_name(col_name);
3 --创立一般组合索引CREATE INDEX index_name ON table_name(col_name_1,col_name_2);
4 --创立独一组合索引CREATE UNIQUE INDEX index_name ON table_name(col_name_1,col_name_2);

2、通过修改表构造创立索引

ALTER TABLE table_name ADD INDEX index_name(col_name);

3、创立表时直接指定索引

CREATE TABLE table_name (
    ID INT NOT NULL,col_name VARCHAR (16) NOT NULL,INDEX index_name (col_name)
);

4、删除索引

--直接删除索引DROP INDEX index_name ON table_name;
--修改表构造删除索引ALTER TABLE table_name DROP INDEX index_name;

5、其它命令

- 查看表构造
    desc table_name;
 - 查看生成表的SQL
    show create table table_name;
 - 查看索引
    show index from  table_name;
 - 查看施行时间
    set profiling = 1;
    SQL...
    show profiles;

索引失效的缘由

1、全值匹配,相当于索引没有使用。

2、未知足最好前缀规则也大概造成索引失效。

3、在索引上做关于(运算、函数、(主动or手动)类型转换),会造成索引失效而致使全表扫描。

4、mysql在使用不等于(<>,!=)的时候没法使用索引而致使全表扫描。

5、is null ,is not null 也没法使用索引。

6、like 以通配符开关('%abc')会致使索引失效而全表扫描。

7、字符串不加单引号索引会失效。

8、少用or,用or连接时会致使索引失效。

9、使用select * 查询,尽量使用覆盖索引。

mysql索引规约

1、【强迫】业务上具有独一特性的字段,即便是多个字段的组合,也必需建成独一索引(说明:不要认为独一索引影响了 insert 速度,这个速度消耗可以忽略,

但提高查寻速度是明显的;别的,即便在利用层做了非常完美的校验操纵,只要没有独一索引,按照墨菲定律,必定有脏数据发生。)

2、【强迫】超越三个表制止 join。需要 join 的字段,数据类型必需绝对一致;多表关联查询时,包管被关联的字段需要有索引。

(说明:即便双表 join 也要留意表索引、SQL 机能。)

3、【强迫】在 varchar 字段上创立索引时,必需指定索引长度,没必要对全字段创立索引,按照实际文本区分度决议索引长度即可。

(说明:索引的长度与区分度是一对矛盾体,一样对字符串类型数据,长度为 20 的索引,区分度会高达 90%以上,

可以使用 count(distinct left(列名, 索引长度))/count(*)的区分度来肯定。)

4、【强迫】页面搜索严禁左含糊或者全含糊,假如需要请走搜索引擎来解决。

(说明:索引文件具有 B-Tree 的最左前缀匹配特性,假如左边的值未肯定,那么没法使用此索引。)

相关文章教程引荐:mysql教程

以上就是mysql索引介绍的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板