08 2022 档案

摘要:上一篇中说了 join 语句的执行过程,了解了深层逻辑,则优化方案呼之欲出。 Multi-Range Read(MRR) 优化 select * from t1 where a>=1 and a<=100; 回表时,根据 ID 去主键索引 B+ 树上查到一行数据。 当回表时 ID 是随机的,就会出现 阅读全文
posted @ 2022-08-26 14:26 菜乌 阅读(169) 评论(0) 推荐(0) 编辑
摘要:join 也是平常开发中经常用到的,本篇了解一下 join 的执行过程。 t1、t2 两张表中有 a、b 字段,a 为索引。 ti 有 100 条数据,t2 有 1000 条数据。 Index Nested-Loop Join(索引嵌套查询) select * from t1 straight_jo 阅读全文
posted @ 2022-08-24 11:34 菜乌 阅读(89) 评论(0) 推荐(0) 编辑
摘要:存储过程是实现特定功能的语句集合,编译后存在数据库中。 通过存储过程的名字,并给定参数来调用。 创建 create procedure 过程名([IN|OUT|INOUT 参数名 数据类型]) begin ; end; 通常在创建之前先进行删除操作,drop procedure if exists 阅读全文
posted @ 2022-08-17 18:28 菜乌 阅读(2995) 评论(0) 推荐(0) 编辑
摘要:上一篇 Mysql 系列 | order by 中介绍了全字段排序、rowid 排序以及借助索引优化排序。 在更复杂的 SQL 中,order by 还会有其他排序方式。 场景 在英语学习 APP 首页,每次打开会随机显示三个英语单词。也就需要每次从表中随机查出三条数据。 表数据越多,随机查询会变得 阅读全文
posted @ 2022-08-15 14:21 菜乌 阅读(1912) 评论(0) 推荐(1) 编辑
摘要:排序很常见,也很消耗资源,怎么尽可能地降低成本,提高效率! 场景 在市民系统的市民信息表中,查询“杭州”的市民信息,并按照姓名排序返回前 1000 人的姓名、年龄 城市字段 city 加索引,避免全表扫描 SQL 语句,select city,name,age from t where city=' 阅读全文
posted @ 2022-08-11 15:16 菜乌 阅读(136) 评论(0) 推荐(0) 编辑
摘要:项目中常常需要统计表数据总数,select count(*) from t;。 在 InnoDB 搜索引擎中,count(*) 需要把数据都读到内存中然后计数,数据很多时会很慢。 count 字段或者 ID,会不会好一些呢!实际上在 Mysql 中,count(字段) < count(主键id) < 阅读全文
posted @ 2022-08-10 14:59 菜乌 阅读(457) 评论(0) 推荐(1) 编辑
摘要:系统中经常会使用到邮箱登录 要验证登录信息常常要根据邮箱查询用户信息,select * from user where email = 'xxx' 怎么给 email 字段创建索引呢? 创建完整索引 /* email 整个字段作为索引 */ alter table user add index in 阅读全文
posted @ 2022-08-09 15:58 菜乌 阅读(501) 评论(0) 推荐(0) 编辑
摘要:默认情况下,SQL 语句中不会选择索引,都是由优化器自动选择。 优化器为了得到最优方案,会考虑扫描行数、是否使用临时表、是否排序等因素。 但有时候,因为种种原因,优化器选择的并不是最佳索引。 索引选择异常处理方案 analyze table 有时候 Mysql 不能准确判断数据的扫描行数,这时可以用 阅读全文
posted @ 2022-08-08 10:56 菜乌 阅读(173) 评论(0) 推荐(0) 编辑
摘要:创建合适的索引,尽量少地访问数据库资源,是数据库结构设计需要考虑的内容。 场景 在一个市民信息表上,身份证号码是市民的唯一标识。 Mysql 系列 | 索引(唯一索引 or 普通索引)中讨论了给身份证号建立索引,即可根据身份证号找到对应的市民详细信息。 如果现在有一个高频请求,要根据身份证号查询姓名 阅读全文
posted @ 2022-08-05 15:59 菜乌 阅读(423) 评论(0) 推荐(0) 编辑
摘要:EXPLAIN 用来模拟优化器执行 SQL 语句的执行计划。从而找到 SQL 优化方案。 EXPLAIN 适用于 SELECT、DELETE、INSERT、REPLACE 和 UPDATE 语句。 EXPLAIN 不会真正执行 SQL 语句,只返回执行计划。 本篇使用 Mysql 8.0.12 EX 阅读全文
posted @ 2022-08-04 15:16 菜乌 阅读(218) 评论(0) 推荐(0) 编辑
摘要:索引时数据库优化最常考虑的内容之一,用对索引可以大大提高查询效率。 场景 一个市民系统,每个人都有唯一的身份证号码, 业务代码已经保证了不会有两个重复的身份证号, 系统要按照身份证号查询姓名, select name from CUser where id_card = 'xxxxxxxyyyyyy 阅读全文
posted @ 2022-08-03 15:46 菜乌 阅读(390) 评论(0) 推荐(0) 编辑
摘要:数据并发访问时,用锁来实现对数据访问权限的控制。 本文还是以 InnoDB 为默认存储引擎。 Mysql 中的锁 全局锁 对整个数据库实例加锁 全局读锁,让整个库处于只读状态 加锁命令,Flush tables with read lock (FTWRL),其他线程的语句会被阻塞,数据增删改、建表修 阅读全文
posted @ 2022-08-02 17:37 菜乌 阅读(61) 评论(0) 推荐(0) 编辑
摘要:索引就相当于一本书的目录,有了这个目录能更快查到自己想要的内容。大大提高数据查询效率。 Mysql 中索引在存储引擎层实现。 数据库中的索引 索引模型 哈希表 以键值对(key-value)存储数据 多个 key 经过哈希函数可能会计算出同样的值,相同 key 对应一个链表循环取值。 key 值不递 阅读全文
posted @ 2022-08-01 16:38 菜乌 阅读(57) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示