Sql优化
文章平均质量分 85
959y
奋斗ing
展开
-
面试_Mysql-2 [26]
文章目录1.一条 Sql 语句查询一直慢会是什么原因2.一条 Sql 语句查询偶尔慢会是什么原因3.为什么 VarChar 建议不要超过2554.删除表数据后表的大小却没有变动,这是为什么5.主从延迟要怎么解决6.buffer pool 是做什么的7.Sql 调优思路1.一条 Sql 语句查询一直慢会是什么原因「1.没有用到索引」比如函数导致的索引失效,或者本身就没有加索引「2.表数据量太大」考虑分库分表吧「3.优化器选错了索引」「考虑使用」 force index 强制走索引2.一条原创 2022-01-29 17:43:27 · 2300 阅读 · 0 评论 -
如何Mysql自增Id用完了如何
文章目录1.InnoDB系统自增row_id2.Xid3.Innodb trx_id4.thread_id5.Redis自增主键6.总结1.InnoDB系统自增row_id如果你创建的 InnoDB 表没有指定主键,那么 InnoDB 会给你创建一个不可见的,长度为 6 个字节的 row_id。InnoDB 维护了一个全局的 dict_sys.row_id 值,所有无主键的 InnoDB 表,每插入一行数据,都将当前的 dict_sys.row_id 值作为要插入数据的 row_id,然后把 dict_原创 2022-01-26 20:32:34 · 365 阅读 · 0 评论 -
innodb-buffer pool
文章目录1.如何管理与淘汰缓冲池,使得性能最大化呢1.1 什么是预读?1.2 预读为什么有效?2.InnoDB 是以什么算法,来管理这些缓冲页呢?2.1 预读失效2.1.1 优化思路2.2 缓冲池污染2.2.1 优化思路3.总结应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存 (cache) 里,避免每次都去访问数据库。操作系统,会有缓冲池 (buffer pool) 机制,避免每次访问磁盘,以加速数据的访问。MySQL 作为一个存储系统,同样具有缓冲池 (buffer pool) 机制,原创 2021-12-05 00:09:39 · 743 阅读 · 0 评论 -
innodb是如何存数据的
文章目录1.磁盘or内存1.1 磁盘1.2 内存2.数据页3.用户记录3.1 额外信息3.1.1 变长字段3.1.2 null值列表3.1.3 记录头信息3.2 隐藏列3.3 真正数据列3.4 用户记录是如何相连的4.最大和最小记录5.页目录6.文件头部和尾部6.1 文件头部6.2 文件尾部7.页头部8.总结innodb底层是如何存储数据的1.磁盘or内存1.1 磁盘数据对系统来说是非常重要的东西,比如:用户的身份证、手机号、银行号、会员过期时间、积分等等。一旦丢失,会对用户造成很大的影响。把数原创 2021-12-04 22:46:18 · 336 阅读 · 0 评论 -
Myisam和Innodb索引实现的不同
myisam和innodb索引实现的不同MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:主键索引树这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。如果我们在Col2上建立原创 2021-11-25 21:51:39 · 240 阅读 · 0 评论 -
面试_Mysql-1 [17]
文章目录1.什么Mysql的事务?事务的四大特性?事务带来的什么问题?2.Mysql的InnoDB和MyISAM有什么区别?3.执行一条查询语句的流程4.redo log和binlog5.什么情况下索引会失效6.索引的种类7.SQL优化8.应用优化9.缓存优化10.内存优化11.什么是聚簇索引和非聚簇索引12.主键使用自增ID还是UUID?能说说原因吗1.什么Mysql的事务?事务的四大特性?事务带来的什么问题?Mysql中事务的隔离级别分为四大等级:读未提交(READ UNCOMMITTED)、读提交原创 2021-09-03 22:32:00 · 526 阅读 · 2 评论 -
Sql常见错误_2
文章目录1.Exsits语句2.条件下推3.提前缩小范围4.提前缩小范围5.总结1.Exsits语句MySQL对待EXISTS子句时,仍然采用嵌套子查询的执行方式。如下面的SQL语句:SELECT *FROM my_neighbor n LEFT JOIN my_neighbor_apply sra ON n.id = sra.neighbor_id AND sra.user_id = 'xxx' WHERE原创 2022-01-20 21:32:18 · 383 阅读 · 0 评论 -
Sql优化_1
文章目录1.避免使用select *2.用union all代替union3.小表驱动大表4.批量操作5.多用limit6.in内东西过多7.增量查询8.高效的分页1.避免使用select *因为select * 查出来的数据是全部的数据,需要的数据包含其中,但是也有不需要的数据,效率低select*不走索引,会出现大量的回表操作,而从导致查询sql的性能很低。select name,age from user where id=1;sql语句查询时,只查需要用到的列,多余的列根本无需查出来。.原创 2022-01-10 23:25:23 · 752 阅读 · 0 评论 -
Sql优化_2
1.用连接查询代替子查询mysql中如果需要从两张以上的表中查询出数据的话,一般有两种实现方式:子查询 和 连接查询。子查询select * from orderwhere user_id in (select id from user where status=1)子查询语句可以通过in关键字实现,一个查询语句的条件落在另一个select语句的查询结果中。程序先运行在嵌套在最内层的语句,再运行外层的语句。子查询比较简单和结构化,但是如果涉及的数量比较多的话不推荐使用子查询在mysql执行子原创 2022-01-12 20:38:59 · 1232 阅读 · 0 评论 -
Sql优化_Join
1.join 基本语法select * from table1 inner join table2 on conditionselect * from table1 left join table2 on conditionselect * from table1 right join table2 on conditioninner join:内连接(等值连接)left join:左连接right join:右连接inner joinselect user.name, user.ag.原创 2022-01-13 22:20:10 · 1152 阅读 · 0 评论 -
Sql优化_Join_2
当能够用上被驱动表的索引的时候,使用的是 Index Nested-Loop Join 算法,这时性能还是很好的;但是,用不上被驱动表的索引的时候,使用的 Block Nested-Loop Join 算法性能就差多了,非常消耗资源。1.Multi-Range Read 优化...原创 2022-01-15 19:46:47 · 462 阅读 · 0 评论 -
一个sql的执行过程详解
1.组成1.客户端2.服务端:连接器、查询缓存、解析器、预处理器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等)。所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等3.存储引擎...原创 2022-01-15 20:00:11 · 367 阅读 · 0 评论 -
Sql优化_索引合并 index merge 造成死锁
文章目录1.问题2.表结构3.explain4.为什么会用 index_merge(索引合并)5.为什么用了 index_merge 就死锁了6.解决方案1.问题在生产环境中,出现了死锁流水的现象。查看死锁日志分析:UPDATE test_table SET `status` = 1 WHERE `trans_id` = 'xxx1' AND `status` = 0;UPDATE test_table SET `status` = 1 WHERE `trans_id` = 'xxx2' AND `原创 2022-01-18 18:25:08 · 1172 阅读 · 0 评论 -
Sql常见错误_1
文章目录1. LIMIT 语句2.隐式转换3.关联更新、删除4.混合排序1. LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。SELECT * FROM operation WHERE type = 'SQLStats' AND name = 'SlowLog' ORDER BY cre原创 2022-01-19 17:33:53 · 1136 阅读 · 0 评论