二分查找和它的变种

二分查找是快速定位一个有序数组的算法,它的优点就是减少对比次数。是一个日常生活中也可以用到的算法思想 优点 减少对比次数o(logn) 缺点 要求查找的数组是有序数组查找数组过小二分查找反而慢 思路 取出中间数 (right-left)/2 只能得到第一次的中间数,正确做法是 left+(right-left)/2中间数和给到的数...

2020-03-13 16:13:17

阅读全文

桶排序与计数排序

桶排序,计数排序 都是非基于比较的排序算法,在一定数据量下(O(k)>O(n*log(n)))快于任何基于比较的排序算法 这3个排序算法的通用性不是很高,我认为排序算法虽然实用性在实际生产中各有不同但是他们的思路是比较重要的。桶排序 计数排序 基数排序 都对要排序数组有点要求。 桶排序 桶排序号称是最快的排序方法...

2020-03-10 18:34:20

阅读全文

归并排序与快速排序

归并排序 归并排序的核心实现就是分治,主要利用一个递归无限的把一个数组分为左右2部分,然后利用一个合并函数把排好序的数组退回去。理解起来比较容易 思路 分解2个函数 meage_sort 负责递归分解出数组,meage负责合并排序数组找到数组的中间数,即长度/2,递归的中断条件为传递进去的长度为0通过中间数把meage_s...

2020-01-14 20:58:15

阅读全文

MySQL误操作的语法与回滚

前段时间我们有个开发同学写了一条更新语句没有加上where条件更新了全库,后来通过了阿里的DTS进行了恢复。但是这个也勾起了我的好奇,如果是自建的系统我们该如何通过binlog恢复数据呢,我们又该怎么预防这些毁灭性的语句呢 几种情况 delete误删数据行drop table 或者 truncate tabledrop database 预防不带where条...

2019-07-04 07:25:48

阅读全文

幻读和间隙锁

幻读在 REPEATABLE-READ 重复读 隔离级别下发生在当前读场景,因为重复读有快照这一概念。既事务启动后的第一个语句创建快照,重复读也是默认的隔离界别,因此幻读是一个比较重要的点了。下面会结合或者照搬网络资料的一些案例来加深理解。 数据场景表结构 CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(...

2019-06-23 19:48:42

阅读全文

MySQL 优化的谚语

MySQL在优化的时候有很多需要注意的知识点,但是有的展开去记录的确会占用太多的篇幅,这边做了一些一句话就可以描述出来的知识点。后面的知识点也是只需点一下就可以回忆起来的。 查询条件做函数运算会用不到索引数字和字符串做比较,会默认吧字符串转化为数字。show processlist 可以查看当前状态下锁和事务的情况...

2019-06-23 01:21:13

阅读全文

mysql order rand 性能优化

往往是一些不起眼的东西更暗含玄机,记得以前有个这样的需求,在网站首页给用户随机推荐词库中的10个热门行业词,而且每一次都要不一样。我们使用了最简单的实现方式,MySQL里order by rand() 排序取出前10个。但是上线后发现这样写的性能尤其底下。 场景表结构 create table words ( id int unsigne...

2019-06-20 20:33:20

阅读全文

mysql order by 排序优化

order by在实际开发环境中使用时还是有很多禁忌的,比如字段的长度,索引的使用,select尽量别用*等,我们来看下order by在MySQL里经历了哪些过程吧,并且学会合理的优化MySQL

2019-06-19 00:28:44

阅读全文

MySQL表空间释放

我们在需要释放MySQL磁盘空间的时候第一反应是删除或者归档一些历史数据,但是这样的做法不一定是绝对正确的,因为有时候删除数据也不一定会及时释放磁盘空间。 在项目中使用神策因为是私有化部署所以极度’珍惜‘磁盘空间,数据量的确太大了。那时候神策的工程师告诉我们可以删除一些不要的数据,但是磁盘空间无法...

2019-06-16 18:27:31

阅读全文

刷脏页带来的数据库抖动怎么优化?

MySQL抖动优化 在公司上班的时候经常是上班了一看听云日志有块小的数据库勃起然后找到运维查看MySQL的状态,因为不是专业的DBA所以给回的数据查考价值有限。后台查了些文档,MySQL的一些配置也会造成这种抖动或者勃起 redo log 刷脏页 redo log在一些地方可能叫redo log buffer 或者 log buffer,在翻查一些质料后知...

2019-06-16 02:25:13

阅读全文

13个MySQL调优的配置参数

整理了13个Mysql常见的调优参数,类比项目中发现,如果是自建的MySQL服务基本要全部设置优化下,如果是云端的产品很多都是大厂已经调节过后的配置。我只是把参数都整理出来了,并且写了一些自己理解的描述和网上查考了一些回答。更权威的还是要撸下官网文档的~~ INNODB_BUFFER_POOL_SIZE这是InnoDB里最重要的一个变量...

2019-06-14 00:56:02

阅读全文

MySQL前缀索引的正确使用

前缀索引的使用场景主要集中在一长段字符串的完全匹配上,但是前缀索引的添加创建以及长短的选择也是有很多学问的。长度选择过长会丢失前缀索引的优势,太短会增加回表的次数。 特点 优势 节约索引空间增加索引查询效率 劣势 覆盖索引失效增加回表次数 前缀索引添加命令语句 alter table SUser add index...

2019-06-11 00:22:00

阅读全文

索引选择与查询语句优化

索引选择 MySQl在一张表中有多个索引,在我们书写查询语句的时候没有指定使用哪个索引来进行查询,这部分操作是由MySQL的查询优化器来决定的。但是查询优化器有选择错误的情况,常见的几种如下(丁奇大佬列举的列子我只是做了归纳整理) 优化器的逻辑 选择索引是优化器的工作,优化器的目的是找到最优的执行方案主要影...

2019-05-19 18:33:05

阅读全文

mysql 的最左前缀原则

在MYSQL InnoDB 中 联合索引的最左原则是一块比较常用的概念,在百度搜索了很多帖子或多或少都和实际情况优先出入,大多是基于《高性能MYSQL》上进行的总结文章,但是时隔多年在实际使用环境下难免有一些版本升级带来的优化问题。带着这些问题进行了下面一波小实验。 联合索引优点 覆盖索引,这一点是最重要的,重所...

2019-05-15 23:27:15

阅读全文

普通索引于唯一索引

知识点 LRUchange Bufferbuffer pool 查询过程 名称 过程 普通索引 查询第一条满足条件的数据,继续查找直到不满足条件停止 唯一索引 查找到第一条,因为保持了唯一性停止查找 InnoDB 数据读写按照数据页为单位读写,也就是说不是把记录本身从磁盘读出来,而是以页为单位读入内存。对于...

2019-05-12 17:04:00

阅读全文