首页 > 编程知识 正文

mysql 辅助索引,MySQL索引的实现原理

时间:2023-05-06 03:59:17 阅读:61983 作者:229

1 .什么是索引,先举个例子吧。 词典应该大家都用过。 使用目录可以快速导航到您要找的东西。 然后,索引的作用类似于目录。 在数据库表记录中,通过利用索引,可以快速过滤和找到数据记录。

2 .索引类型分类

2.1常规索引

加快查询速度

2.2唯一索引

查询速度加快,列值的唯一性受到限制,可以允许为空

唯一索引包括联合唯一索引和由多个列组成的唯一索引。 这些列可以唯一确定单个表记录并将其设置为null

2.3全文索引

主要对文本内容进行分词,加快查询速度

2.4合并索引

在由多列组成的索引中,查询效率比多列索引集成更高

2.5主键索引

唯一性、查询加速、不能为空

3 .索引结构分类

索引有多种分类,包括B-tree索引、散列索引和全文索引。 由于索引实现是存储引擎层,而不是后端服务器层,因此存储引擎支持的索引结构不一定相同

3.1 B-树索引

B-tree索引广泛存在于存储引擎中,使用B-tree数据结构存储数据。 如果你熟悉树数据结构,你就会发现B-tree索引的好处。 每个叶节点都包含指向以下节点的指针,以便于查询数据

B-tree适用于所有键值、键值范围或前缀搜索

3.2散列索引

哈希索引基于哈希表实现,对于每行中的数据,存储引擎为所有索引列计算舒适的爆米花,存储引擎根据该舒适的爆米花搜索数据。 小编感觉很像HashMap插槽的查询处理

3.3全文索引

全文索引在几种索引结构类型中很特殊,他在寻找文本中的关键字

4 .索引的正确使用

索引是在系统文件中创建的,占用一定的内存空间。 此外,索引必须正确使用,因为数据在更新时会保留索引并消耗内存。 索引并不是越多越好,需要根据具体的查询业务修订索引的创建。

建议不要使用索引的几种情况:

1 .性别sex等区分度不是很大的字段

2 .经常更新的字段

3 .字符串型字段或文本型字段

未出现在where列中的索引

索引失效的几种情况:

1 .查询列中有函数计算

2 .查询列中有一个模糊查询。 “%cloum”可以用“cloum%”替代。 如果使用“%column%”,则在选择列中有索引列

3 .如果查询条件具有or,则除非所有条件都有索引,否则索引将无效

4 .使用不等于(!=或)

5. is null或is not null

6 .如果字符串不加引号,索引将无效

7 .最左原则,合并索引遵循最左原则。 即,使用连接索引时,前面的索引列必须包含。 举个例子,

如果存在联合索引(a,b,c ),则查询条件只能是a=1或a=1 and b=1或a=1 and b=1 and c=1。 否则,索引将无效

5 .扩展分析查询sql

select_type :

简单查询SIMPLE: 不包括子查询、相关查询等

如果PRIMARY:查询包含复杂的部分,则最外面的查询被标记为PRIMARY

SUBQUERY:子查询中的第一个查询

UNION:相关查询,最后一个。

type :查询语句的性能:按allindexrangeindex _ mergerefeq _ ref constant/system的顺序增加

All:全表扫描,性能最高

索引:所有索引列扫描

range:在单个索引列上执行范围搜索,或者between and或in或!=

index_merge:多个索引集成查询

ref:基于单个索引进行搜索

连接eq_ref:时使用主密钥或unique类型

常数:

系统:系统

possible_keys:中可用的索引

key:实际使用的索引

key_len:使用的索引长度

rows :扫描的行数

extra :包含用于解析查询的MySQL详细信息

6 .滚动查询日志

滚动查询日志是指mysql查询时间超过一定阈值的查询记录,默认时间为10秒,mysql默认情况下不打开滚动查询

默认值: showvariableslike ' % slow _ query _ log % '

设置全局变量名称=手动打开值

设置全局slow _ query _ log=on; 手动打开滚动查询日志

设置全局long _ query _ time=10; 手动设置超过查询时间的值,超过时记录查询日志

set全局slow _ query _ log _ file=' g :varslow _ log.txt '; 手动设置滚动查询日志的记录地址

set全局log _ queries _ not _ using _ indexs=on; 手动设置是否记录查询中用于索引的记录

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。