MySQL
文章平均质量分 66
gossipchat
这个作者很懒,什么都没留下…
展开
-
【MySQL】count统计哪种更快
文章目录一. MySQL 的逻辑架构图二. 对比各种count方法(以Innodb为例)1.count(*)2. count(1)3.count(主键)4. count(字段)三. 结论1. 【不取值】可以理解为:返回了一行,但是只有0个字段2. count统计不一定会走主键索引,而是根据查询条件选择最小的索引树3. 按照效率排序,==count(字段) < count(主键 id) < count(1) ≈ count(*)==,所以尽量使用 count(*)一. MySQL 的逻辑架构图原创 2022-01-10 19:40:19 · 807 阅读 · 0 评论 -
【MySQL】常用语句
文章目录一. 修改自增长字段值二. 事务1. 隔离级别三. 数据统计1. 数据库表信息2. 列信息3. 索引信息4. 事务一. 修改自增长字段值自增长起始值修改只能比原来更大,不能更小alter table testid auto_increment=100;二. 事务1. 隔离级别查看事务隔离级别:show variables like 'transaction_isolation';默认值:('transaction_isolation', 'REPEATABLE-READ');原创 2021-10-15 10:36:55 · 85 阅读 · 0 评论 -
【MySQL】选错索引的原因分析
文章目录一. 背景1. MySQL怎样选择索引?2. Candinality3. 采样统计二. 原因1. Explain显示的rows值和表中数据的实际行数相差较大,导致索引选错。2. 为什么二级索引扫描行数少,MySQL却选择了全表扫描?2. 是否排序3. 是否存在临时表三. 解决思路1. explain和预估的行数相差较大,可以通过analyze table 来重新统计索引信息2. 通过【force index】强制指定需要使用的索引,不让优化器进行判断3. 通过改写SQL语句引导MySQL使用指定索引原创 2021-09-29 12:36:18 · 506 阅读 · 0 评论 -
【MySQL】查询指定数据库各个表的记录数、数据容量、索引容量
一、概述查看mysql库中,各个表的记录数、数据容量、索引容量二、查询语句selecttable_schema as '数据库',table_name as '表名',table_rows as '记录数',truncate(data_length/1024/1024, 2) as '数据容量(MB)',truncate(index_length/1024/1024, 2) as '索引容量(MB)'from information_schema.tableswhere t.原创 2020-10-30 12:19:40 · 475 阅读 · 0 评论 -
【MySQL】【转】一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG
原文地址:https://www.cnblogs.com/coderw/p/14676343.html这一周线上碰到一个诡异的BUG。线上有个定时任务,这个任务需要查询一个表几天范围内的一些数据做一些处理,每隔十分钟执行一次,直至成功。通过日志发现,从凌晨5:26分开始到5:56任务执行了三次,三次都因为SQL查询超时而执行失败,而诡异的是,任务到凌晨6:00多就执行成功了。每天都是凌晨五点多失败,凌晨六点执行成功。点开异常日志一看是这样的:总结来说就是MySQL查询超.转载 2021-04-20 14:20:56 · 112 阅读 · 0 评论 -
【MySQL】【转】关于mysql的参数autocommit
背景知识:mysql事务支持的引擎是InnoDB默认情况下autocommit的值为11.首先准备一张innodb引擎的测试表:CREATE TABLE `test` ( `id` int(11) NOT NULL) ENGINE=InnoDB;INSERT INTO `test` VALUES ('1');INSERT INTO `test` VALUES ('3');INSERT INTO `test` VALUES ('5');2.执行如下命令可以发现mysql的aut.转载 2021-04-22 16:56:05 · 227 阅读 · 0 评论 -
【MySQL】【转】MySQL Explain详解
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。-- 实际SQL,查找用户名为Jefabc的员工select * from emp转载 2021-04-20 17:42:28 · 80 阅读 · 0 评论 -
【MySQL】表数据越来越多,查询越来越慢怎么办?
前提是已经考虑了索引的问题,但因为数据量大导致读表的增删改查还是很慢解决方案建议 1. 历史数据归档 2. 数据分表一. 历史数据归档1.1 方案 1. 根据时间范围查找需要删除的数据 2. 如果主键是有序的,可以根据时间范围查找到临界主键进行删除 3. 创建临时表,迁移数据(排除需归档数据),再修改临时表为原表(需要停机) 1 2 3 4 5 6 7 8 9...原创 2020-12-03 11:03:39 · 2345 阅读 · 0 评论 -
【MySQL】事务隔离级别详述
数据库中的三种锁 1.写锁(Write Lock,也叫做排他锁 eXclusive Lock,简写为 X-Lock) 只有持有写锁的事务才能对数据进行写入操作,数据加持着写锁时,其他事务不能写入数据,也不能施加读锁。(不能读写) 2.读锁(Read Lock,也叫做共享锁 Shared Lock,简写为 S-Lock) 多个事务可以对同一个数据添加多个读锁,数据被加上读锁后就不能再被加上写锁,所 以其他事务不能对该数据进行写入,但仍然可以读取。对于持有读锁的事务..原创 2021-01-05 20:18:34 · 77 阅读 · 0 评论 -
【MySQL】truncate抛异常System Lock
文章目录一. 背景二. 现象三. 分析四. 解决思路五. 结论一. 背景表数据大概几十万,不到五十万每隔10几分钟使用truncate清空数据,然后再写入等量数据数据库主从结构数据库版本5.7二. 现象执行truncate时从库偶发抛异常【System Lock】,非必现。占用线程资源,导致后续SQL语句全部阻塞从库不可用,进而导致路由到该从库的请求全部阻塞,从而导致应用雪崩三. 分析网上搜了很多资料,都说是truncate在MySQL5.7及以下版本的bug,drop命令可以原创 2021-05-06 14:24:01 · 349 阅读 · 0 评论 -
【MySQL】为什么重复值高的字段不能建索引(比如性别字段等)
结论(以innodb为例)非聚簇索引存储了对主键的引用,如果select字段不在非聚簇索引内,就需要跳到主键索引(上图中从右边的索引树跳到左边的索引树),再获取select字段值如果非聚簇索引值重复率高,那么查询时就会大量出现上图中从右边跳到左边的情况,导致整个流程很慢如果where值重复率高的字段,select用了limit,只查较少数据,也就是跳的次数很少的情况下,还是可以建索引的(后来想想也没必要,limit限制了数量,全表扫描也很快,除非字段值是排序的,必须扫描完前面的所有值).原创 2021-09-24 10:47:01 · 2363 阅读 · 2 评论 -
【MySQL】update A set num=num+ ? where id=?是否存在并发的问题
在我们的实际开发中,往往会遇到更新数据字段的问题。如投票时,如果多人同时投票,是否存在在取数据并更新的时候,原始值是相同的,而后续的update操作会造成错误的数据? 比如,表名A,字段名为 number,如下的SQL语句: 语句1:update A set number=number+ 5 where id=1; 语句2:update A set number=number+ 7 where id=1;转载 2021-04-26 17:00:17 · 477 阅读 · 0 评论 -
【MySQL】长事务
文章目录一. 长事务原因1. set autocommit=02. 事务方法业务复杂,执行时间长二. 长事务危害1. 占用大量的存储空间2. 占用锁资源,甚至拖垮整个库三. 查看长事务四. 解决长事务1. 程序端2. 数据库端五. 参考资料1. mysql 之general_log日志开启详解以及清空一. 长事务原因1. set autocommit=0这个命令会关闭当前线程的事务自动提交功能意味着如果只执行一个 select 语句,这个事务就启动了,而且并不会自动提交。这个事务持续存原创 2021-04-23 17:20:12 · 346 阅读 · 0 评论