有一个问题是这样的统计数据总数用count(*).count(主键ID).count(字段).count(1)那个效率高. 先说结论,不用那么花里胡哨遇到统计总数全部使用count(*). 但是有很多小伙伴就会问为什么呢?本期文章就解决大家的为什么. 系列文章 五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 字符串可以这样加索引,你知吗?<死磕MySQL系列 七> 无法复现的"慢"SQL<死磕MySQL系列 八> 什么?还在用de…
群里一个小伙伴在问为什么MySQL字符串不加单引号会导致索引失效,这个问题估计很多人都知道答案.没错,是因为MySQL内部进行了隐式转换. 本期文章就聊聊什么是隐式转换,为什么会发生隐式转换. 系列文章 字符串可以这样加索引,你知吗?<死磕MySQL系列 七> 无法复现的"慢"SQL<死磕MySQL系列 八> 什么?还在用delete删除数据<死磕MySQL系列 九> MySQL统计总数就用count(*),别花里胡哨的<死磕MySQL系列 十…
在日常开发工作中,你一定会经常遇到要根据指定字段进行排序的需求. 这时,你的SQL语句类似这样. select id,phone,code from evt_sms where phone like '13020%' order by id desc limit 10 这个SQL的逻辑是十分清晰明了,但其内部的执行原理你知多少. 接下来,本期文章将带你打开order by的大门一探究竟. 本期所有结论都基于MySQL8.0.26版本 最新文章 字符串可以这样加索引,你知吗?<死磕MySQL系列…
在开发中有遇到很简单的SQL却执行的非常慢,甚至只查询一行数据. 咔咔遇到的只有两种情况,一种是MySQL服务器CPU占用率很高,所有的SQL都执行的很慢直到超时,程序也直接502,另一种情况是行锁造成的锁等待. 接下来咔咔带领大家看看各种为难SQL执行的场景,本期文章带大家再熟悉一下MySQL中的锁 最新文章 死磕MySQL系列总目录 什么?还在用delete删除数据<死磕MySQL系列 九> MySQL统计总数就用count(*),别花里胡哨的<死磕MySQL系列 十> 为什么…
由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务B毫不犹豫的执行了DDL操作 接下来会发生什么,你如果已经知道答案的话恭喜你又掌握了一个MySQL中重要的知识点. 事务A执行查询时会持有MDL锁,而事务B同样也需要MDL锁,但事务A在进行大查询,所以导致事务B后的所有操作都会被堵塞. 这时你应该知道了在MySQL中所有对表的增删改查都需要申请MD…
大家好,我是咔咔 不期速成,日拱一卒 之前ElasticSearch系列文章中提到了如何处理空值,若为Null则会直接报错,因为在ElasticSearch中当字段值为null时.空数组.null值数组时,会将其视为该字段没有值,最终还是需要使用exists或者null_value来处理空值 大多数ElasticSearch的数据都来自于各类数据库,这里暂且只针对于MySQL,各个开源软件中都默认兼容各种Null值,空数组等等 若从根源上截断就可以省很多事,直到现在很多开发小伙伴还是坚韧不拔的给…
系列文章 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 六.五分钟,让你明白MySQL是怎么选择索引<死磕MySQL系列 六> 相信大多数小伙伴跟咔咔一样,给字符串添加索引从未设置过长度,今天就来聊聊如何正确的给字符串加索引. 一.如何建立索引 大多数系统都会存在用户表,并且系统初始设计使用了手机号码登录的. 这是产…
系列文章 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引<死磕MySQL系列 五> 如果你对索引的知识点还不太清楚,可以直接通过传送门查看咔咔总结的索引知识点. 揭开MySQL索引神秘面纱 索引是为加速查询速度,创建的索引也符合所有规则,但MySQL就是不使用理想的索引,导致…
系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据一条查询语句查询流程分析MySQL的整体架构.同样,本期也使用一条查询SQL语句来做引子.可以肯定的是,查询语句执行的流程更新语句同样也会执行. 因此本期的着重点就不在MySQL架构图上,文章标题也给出了大家重点,就是要了解redo log.binlog. 一.redo log 第一步,创建一个表 user,…
系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 前言 最近数据库老是出现下面死锁情况,借着这俩种情况出发详细的理解一下MySQL中的锁. Lock wait timeout exceeded; try restarting transaction Deadlock found when trying to get lock; try restarting transact…