mysql索引介绍

mysql索引介绍

什么是索引?

索引是一种高效获取数据的数据结构。

索引的类型

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、创建表时直接指定索引

jQuery的页面功能分步指引介绍代码 jQuery的页面功能分步指引介绍代码

jQuery的页面功能分步指引介绍代码

jQuery的页面功能分步指引介绍代码 47 查看详情 jQuery的页面功能分步指引介绍代码

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索引介绍的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/781832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
越疆科技今日上市,系港股国内协作机器人第一股
上一篇 2025年11月26日 10:01:22
搜狗浏览器怎么关闭开机自动启动 关闭开机自动启动方法
下一篇 2025年11月26日 10:01:22

相关推荐

发表回复

登录后才能评论
关注微信