fsoooo Blog

内不欺己,外不欺人,上不欺天。君子所以慎独。

Mysql学习笔记 分库分表部署上线

引言 我们先来讲一个段子 面试官:“有并发的经验没?” 应聘者:“有一点。” 面试官:“那你们为了处理并发,做了哪些优化?” 应聘者:“前后端分离啊,限流啊,分库分表啊。。” 面试官:”谈谈分库分表吧?” 应聘者:“bala。bala。bala。。” 面试官心理活动:这个仁兄讲的怎么这么像网上的博客抄的,容我再问问。 面试官:“你们分库分表...

Mysql学习笔记 使用全文索引进行模糊搜索

工作中经常会有搜索的需求,最常用的就是模糊搜索%+like+%,在InnoDB中使用 “like%xx” 会导致索引失效,会大大降低搜索的效率。 通过数值比较,范围过滤等就可以完成绝大多数我们需要的查询了。 但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较,全文索引就是为这种场景设计的。 ###全文索引(Full-Text Searc...

Mysql学习笔记 优化法则

SQL 本身并不难学,编写查询语句也很容易,但是想要编写出能够高效运行的查询语句却有一定的难度。 查询优化是一个复杂的工程,涉及从硬件到参数配置、不同数据库的解析器、优化器实现、SQL 语句的执行顺序、索引以及统计信息的采集等,甚至应用程序和系统的整体架构。 本文介绍几个关键法则,可以帮助我们编写高效的 SQL 查询;以下法则适用于各种关系型数据库,包括但不限于:MySQL、...

Mysql学习笔记 事务实现原理

开篇 先了解事务以及他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等。今天想跟大家一起研究下事务内部到底是怎么实现的,在讲解前我想先抛出个问题: 事务想要做到什么效果? 按我理解,无非是要做到可靠性以及并发处理 可靠性:数据库要保证当insert或update操作时抛异常或者数据库cras...

Mysql学习笔记 为什么select 会导致查询效率低?

面试官:“小陈,说一下你常用的SQL优化方式吧。” 陈小哈:“那很多啊,比如不要用SELECT *,查询效率低。巴拉巴拉…” 面试官:“为什么不要用SELECT * ?它在哪些情况下效率低呢?” 陈小哈:“SELECT * 它好像比写指定列名多一次全表查询吧,还多查了一些无用的字段。” 面试官:“嗯…” 陈小哈:“emmm~ 没了” 陈小哈:“….??(几个意思)...

Mysql学习笔记 为什么mysql不推荐使用子查询和join

1.对于mysql,不推荐使用子查询和join是因为本身join的效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据。 2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。 3.如果是JOIN的话,它是...

Mysql学习笔记 Distinct 和 Group By 哪个效率更高?

先说大致的结论(完整结论在文末): 在语义相同,有索引的情况下group by和distinct都能使用索引,效率相同。 在语义相同,无索引的情况下:distinct效率高于group by。原因是distinct 和 group by都会进行分组操作,但group by可能会进行排序,触发filesort,导致sql执行效率低下。 基于这...

Mysql学习笔记 Count()

count()函数是用来统计表中记录的一个函数,返回匹配条件的行数。 很多人在使用count()方法时,会用 count(1) 替代 count(),认为 count(1) 比 count() 效率高。 下面我们来一探究竟。 count(1) 和 count(*) 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!! 从执行计划来看...

Mysql学习笔记 Sql优化万能公式:5 大步骤 + 10 个案例

SQL优化一般步骤 步骤1、通过慢查日志等定位那些执行效率较低的SQL语句 步骤2、explain 分析SQL的执行计划 需要重点关注type、rows、filtered、extra。 #####type type由上至下,效率越来越高 ALL 全表扫描 index 索引全扫描 range 索引范围扫描,常用语<,<=,>=,...

Mysql学习笔记 Sql 中如何处理null值

在日常使用数据库时,你在意过NULL值么? 其实,NULL值在数据库中是一个很特殊且有趣的存在,下面我们一起来看看吧; 在查询数据库时,如果你想知道一个列(例如:用户注册年限 USER_AGE)是否为 NULL,SQL 查询语句该怎么写呢? 是这样: SELECT * FROM TABLE WHERE USER_AGE = NULL 还是这样? SELECT * FROM T...