场景 1、维护一个市民系统,有一个字段为身份证号 2、业务代码能保证不会写入两个重复的身份证号(如果业务无法保证,可以依赖数据库的唯一索引来进行约束) 3、常用sql查询语句:SELECT n
场景
1、维护一个市民系统,有一个字段为身份证号
2、业务代码能保证不会写入两个重复的身份证号(如果业务无法保证,可以依赖数据库的唯一索引来进行约束)
3、常用sql查询语句:SELECT name FROM CUser WHERE id_card = 'XXX'
4、建立索引
假设字段k上的值都不重复
查询过程
1、查询语句:SELECT id FROM T WHERE k=5
2、查询过程
3、针对普通索引
4、针对唯一索引
性能差异
1、性能差异:微乎其微
2、InnoDB的数据是按照数据页为单位进行读写的,默认为16KB
3、当需要读取一条记录时,并不是将这个记录本身从磁盘读出来,而是以数据页为单位进行读取的
4、当找到k=5的记录时,它所在的数据页都已经在内存里了
5、对于普通索引而言,只需要多一次指针寻找和多一次计算 – CPU消耗很低
change buffer
1、当需要更新一个数据页时,如果数据页在内存中就直接更新
2、如果这个数据页不在内存中,在不影响数据一致性的前提下
3、change buffer是可以持久化的数据,在内存中有拷贝,也会被写入到磁盘上
4、将更新操作先记录在channge buffer,减少随机读磁盘,提升语句的执行速度
5、另外数据页读入内存需要占用buffer pool,使用channge buffer能避免占用内存,提高内存利用率
6、change buffer用到是buffer pool里的内存,不能无限增大,控制参数innodb_change_buffer_max_size
# 默认25,最大50
Mysql> SHOW VARIABLES LIKE '%innodb_change_buffer_max_size%';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| innodb_change_buffer_max_size | 25 |
+-------------------------------+-------+
--结束END--
本文标题: MySQL普通索引和唯一索引的深入讲解
本文链接: https://www.lsjlt.com/news/51448.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-09
2024-05-09
2024-05-09
2024-05-09
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0