背景
每个公司针对数据库的设计都有套方案。最近在巡检表的设计,发现之前有张表漏掉了针对更新时间字段updated_at的索引,现在需要加上该索引。
我们都知道,为表增加索引是会对表进行加锁处理的。稍有不慎,可能会导致表被锁后,业务无法进行读写操作而产生事故影响,通常都是报错Waiting for meta data lock。在对表进行修改时,特别是生产上,我们首先要观察对应的表此时是否在高并发读写(选择操作时机)、表的量级信息
2024年09月11日
每个公司针对数据库的设计都有套方案。最近在巡检表的设计,发现之前有张表漏掉了针对更新时间字段updated_at的索引,现在需要加上该索引。
我们都知道,为表增加索引是会对表进行加锁处理的。稍有不慎,可能会导致表被锁后,业务无法进行读写操作而产生事故影响,通常都是报错Waiting for meta data lock。在对表进行修改时,特别是生产上,我们首先要观察对应的表此时是否在高并发读写(选择操作时机)、表的量级信息
2024年09月11日
select * from t whereid=1,id 列有索引,如果是普通的表,需要先从索引中获取 rowid,然后定位到表中,获取 id以外的其他列的动作,这就是回表。
如果查询列含索引列以外的列,回表就不可避免.
2024年09月11日
大家好,我是闲水,每天更新java最新最热技术,对java感兴趣的朋友记得关注一下哦。
注意 :这是SQL性能优化第三章,点击关注查看前置内容。
上篇文章我们主要了解了索引优化的标尺"Explain"怎么用,这一张,我们就要将索引怎么建立,以及索引失效的例子了。废话不多说我们开始。
一 单表查询建立索引
系统中经常出现的sql语句如下: ( SQL_NO_CACHE 是不查找缓存,以免对我们的结果造成影响)
2024年09月11日
一、模式的定义与删除
1.定义模式
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
如果没有指定<模式名>,那么<模式名>隐含为<用户名>
例如:定义一个学生—课程模式S-T
2024年09月11日
上一篇我们聊了B+树是什么,innodb为什么选择了B+树,接下来我们来看看innodb是如何使用B+树这个数据结构来组织数据的。
聚集索引
聚集索引,也有的书将它翻译为聚簇索引。innodb的数据按照主键(没有主键则为第一个设置的候选码,没有候选码则为隐藏字段rowid)的顺序存放在B+树中,所以innodb存储引擎表又叫索引组织表。在这颗B+树中,叶子节点存放行记录数据,这颗
2024年09月11日
当我们在分析某些语句的性能时,会分析一些信息。像表、列、索引、直方图等等,所以今天主要讲表与列、索引的统计信息收集与分析。
表统计:
--行数,块数,行平均长度;
--all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN;
列统计:
--列中唯一值的数量(NDV),NULL值的数量,数据分布;
2024年09月11日
我们知道,不借助额外空间的情况下,在链表中查找一个值,需要按照顺序一个个查找,时间复杂度为 O(N),其中 N 为链表长度。
当链表长度很大的时候, 这种时间是很难接受的。 一种常见的的优化方式是建立哈希表,将所有节点都放到哈希表中,以空间换时间的方式减少时间复杂度,这种做法时间复杂度为 O(1),但是空间复杂度为 O(N)。
为了防止链表中出现重复节点带来的问题,我们需要序列化节点,再建立哈希表,这种空间占用会更高,虽然只是系数级别的增加,但是这种开销也是不小的 。更重要的是,哈希表不能解决查找极值的问题,其仅适合根据 key 来获取内容。
2024年09月11日
show create table users;
show index from users;
show keys from users;
均可以查询users表的索引信息,如下图
show index from users\G
show index from users
说明:
2024年09月11日
当我们在分析某些语句的性能时,会分析一些信息。像表、列、索引、直方图等等,所以今天主要讲表与列、索引的统计信息收集与分析。
表统计:
--行数,块数,行平均长度;
--all_tables:NUM_ROWS,BLOCKS,AVG_ROW_LEN;
列统计:
--列中唯一值的数量(NDV),NULL值的数量,数据分布;
2024年09月11日