Mysql 索引
1.普通索引和唯一索引
1.1.索引选择
select name from CUser where id_card = 'xxxxxxxyyyyyyzzzzz';
由于id_card字段比较大,不建议做主键,那么有两个选择
- id_card创建唯一索引
- id_card创建普通索引
select id from T where k=5;
查询过程
- 普通索引,查到第一个满足条件记录后,需要向后继续查找记录。
- 唯一索引,查找第一个记录后,停止继续检索。
两者性能无差别,因为都在一个数据页里。
更新过程
重学MySQL打卡行动Day23!
学习内容 : 如何选择索引 对应篇目: 10 | MySQL为什么有时候会选错索引?http://gk.link/a/101u1
今天这篇文章,丁奇会和你分析MySQL选错索引的两种情况:
1.因为索引统计信息不准确导致的问题,你可以用analyze table来解决。 2.对于优化器误判的情况,你可以在应用端用force index来强行指定索引,也可以通过修改语句来引导优化器,还可以通过增加或者删除索引来绕过这个问题。
️学习完这部分之后请在小程序上记录学习笔记或者感悟,视为当日打卡成功,一周打卡≥3次即可获得阶段性奖励。
现在可以开始 Day23 打卡了,好的开始就是成功的一半,大家加油哦!
重学MySQL打卡行动 Day24!
学习内容 : 给字符串加索引 对应篇目: 11 | 怎么给字符串字段加索引?http://gk.link/a/101vB
今天这篇文章,丁奇会和你分析给字符串加索引的四种方式:
- 直接创建完整索引;
- 创建前缀索引;
- 倒序存储,再创建前缀索引;
- 创建hash字段索引。
️学习完这部分之后请在小程序上记录学习笔记或者感悟,视为当日打卡成功,一周打卡≥3次即可获得阶段性奖励。
现在可以开始 Day24 打卡了,好的开始就是成功的一半,大家加油哦!
重学 MySQL 打卡行动 Day25!
学习内容 : InnoDB脏页的控制策略 对应篇目: 12 | 为什么我的MySQL会“抖”一下?http://gk.link/a/101xr
一条 SQL 语句,正常执行时特别快,但是有时也不知道怎么回事,它会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。看上去,就像是数据库“抖”了一下。
今天,丁奇就和你说说这是怎么回事。
️学习完这部分之后请在小程序上记录学习笔记或者感悟,视为当日打卡成功,一周打卡≥3次即可获得阶段性奖励。
现在可以开始 Day25 打卡了,好的开始就是成功的一半,大家加油哦!
重学MySQL打卡行动Day26!
学习内容:日志和索引常见问题
对应篇目: 15 | 答疑文章(一):日志和索引相关问题 http://gk.link/a/101D8
今天,丁奇会与你分析几个与日志和索引相关的问题,比如“在两阶段提交的不同瞬间,MySQL 如果发生异常重启,如何保证数据完整性?”“如果业务根本无法保证不会插入重复数据,且数据库一定要有唯一性约束,设计时采用唯一索引还是普通索引?”。
️学习完这部分之后请在小程序上记录学习笔记或者感悟,视为当日打卡成功,一周打卡≥3次即可获得阶段性奖励。
现在可以开始 Day26 打卡了,好的开始就是成功的一半,大家加油哦!
Day35~Day36 是周末,给大家放假哦!回顾一下本周学习篇目,没有学完的小伙伴要加油补卡啦~
Day29: 23 | MySQL是怎么保证数据不丢的?http://gk.link/a/101Qm 重学MySQL打卡行动Day29!
学习内容 : binlog和redo log的写入机制 对应篇目: 23 | MySQL是怎么保证数据不丢的?http://gk.link/a/101Qm
保证 redo log 和 binlog 是完整的,是MySQL保证数据不丢失的关键。今天这篇文章,丁奇会重点与你分析 MySQL 写入 binlog 和 redo log 的流程。
同时,你可以结合第2和第15篇文章,对crash-safe 有更清晰的理解。
Day30: 33 | 我查这么多数据,会不会把数据库内存打爆?http://gk.link/a/10248 重学MySQL打卡行动Day30!
学习内容 : 大查询 对应篇目: 33 | 我查这么多数据,会不会把数据库内存打爆?http://gk.link/a/10248
大查询不会把数据库内存打爆的原因在于:
1.MySQL采用的是边算边发的逻辑,因此对于数据量很大的查询结果来说,不会在server端保存完整的结果集; 2.InnoDB引擎内部有淘汰策略,大查询也不会导致内存暴涨。
Day31: 13 | 为什么表数据删掉一半,表文件大小不变?http://gk.link/a/101zf 重学MySQL打卡行动 Day31!
学习内容 : 数据库表的空间回收 对应篇目: 13 | 为什么表数据删掉一半,表文件大小不变?http://gk.link/a/101zf
如果要收缩一个表,只是delete掉表里面不用的数据的话,表文件的大小是不会变的,你还要通过alter table命令重建表,才能达到表文件变小的目的。
Day32: 41 | 怎么最快地复制一张表? https://time.geekbang.org/column/article/81925 重学 MySQL 打卡行动 Day32!
学习内容:表的复制 对应篇目: 41 | 怎么最快地复制一张表? https://time.geekbang.org/column/article/81925
将一个表的数据导入到另外一个表中的方法,只要有三种: 1.mysqldump方法; 2.导出CSV文件方法; 3.物理拷贝方法。
Day33: 17 | 如何正确地显示随机消息? http://gk.link/a/101HO 重学MySQL打卡行动Day33!
学习内容:临时表排序的执行过程 对应篇目: 17 | 如何正确地显示随机消息? http://gk.link/a/101HO
为了解决正确显示随机消息的问题,你需要知道下面两点:
1.不论是使用哪种类型的临时表,order by rand()这种写法都会让计算过程非常复杂,需要大量的扫描行数,排序过程消耗很多资源。 2.比较规范的用法是,尽量将业务逻辑写在业务代码中,让数据库只做“读写数据”的事情