书写高质量SQL的30条建议
由于版本原因,部分建议可能已无效,请实际测试后使用
1、查询SQL尽量不要使用select *,而是select具体字段反例:
1select * from user;
正例:
1select id, name from user;
理由:
只取需要的字段,节省资源、减少网络开销
select * 进行查询时,很可能就不会使用到覆盖索引了,就会造成回表查询
2、如果知道查询结果只有一条或者只要最大/最小一条记录,建议用limit 1反例:
1select id, name from user where name = 'InkDP';
正例:
1select id, name from user where name = 'InkDP' limit 1;
理由:
加上limit 1后,只要找到了对应的一条记录,就不会继续向下扫描了,效率将会大大提高。
当然,如果name是唯一索引的话,是不必要加上limit 1了,因为limit的存在主要就是为了防止全表扫描,从而提高性能,如果一个语句本身可以预知不用全表扫描,有没有limit ...
事务详解极其使用方式
事务是什么事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
事务的ACID属性
原子性(Atomicity): 事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
一致性(Consistency): 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的
隔离性(Isolation): 一个事务的执行不能被其他事务干扰。由并发事务所作的修改必须与任何其他并发事务所作的修改隔离。事务识别数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是第二个事务修改它之后的状态,事务不会识别中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性(Durability): 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
事务的4个隔离级别事务并发可能出现的情况脏读
一个事务读到了另外一个事务未提交 ...
Docker学习笔记
Docker 是一个用于开发、发布和运行应用程序的开放平台。Docker 使您能够将应用程序与基础结构分离开来,从而可以快速交付软件。使用 Docker,您可以像管理应用程序一样管理基础结构。通过利用 Docker 的快速发布、测试和部署代码的方法,可以显著减少编写代码和在生产环境中运行代码之间的延迟。
记一次主键查询乱序
前言今天日常开发中,一条简单的不能再简单的查询,却莫名出现了主键乱序的情况,虽然加了order by之后完美解决,但是还是想究其原因。
复现一下表结构:
12345678CREATE TABLE `tb_test` ( `id` int NOT NULL AUTO_INCREMENT, `room_id` int NOT NULL, `user_id` int NOT NULL, `amount` decimal(10, 2) NOT NULL, PRIMARY KEY (`id`), INDEX `tb_test_room_id_user_id_index`(`room_id`, `user_id`) USING BTREE);
插入数据(多插入几条数据,确保使用索引比全表扫描快,这样才会使用到索引 )
123456789INSERT INTO `tb_test` (`id`, `roo ...
go结构体组合排序
排序是开发中不可避免的,go的标准库sort提供了这一功能,主要针对[]int,[]float64,[]string、以及其他自定义切片的排序。对于前三个切片基本没有可说的,而对于用户自定义切片,就需要我们自己去实现它的排序了,实现Interface接口再调用sort.Sort()
举个例子:
12345678910111213141516171819type NewInt []intfunc (n NewInt) Len() int { return len(n)}func (n NewInt) Less(i, j int) bool { return n[i] < n[j]}func (n NewInt) Swap(i, j int) { n[i], n[j] = n[j], n[i]}func main() { n := []int{1,3,2} sort.Sort(NewInt(n)) fmt.Println(n)}
这样写 ...
《实现领域驱动设计》阅读笔记一图流
领域驱动设计:软件核心复杂性应对之道(修订版)是由[美] 埃里克 埃文斯(Eric Evans)著作,人民邮电出版社出版,本书是领域驱动设计方面的经典之作,修订版更是对之前出版的中文版进行了全面的修订和完善。 全书围绕着设计和开发实践,结合若干真实的项目案例,向读者阐述如何在真实的软件开发中应用领域驱动设计。书中给出了领域驱动设计的系统化方法,并将人们普遍接受的一些实践综合到一起,融入了作者的见解和经验,展现了一些可扩展的设计新实践、已验证过的技术以及便于应对复杂领域的软件项目开发的基本原则。
Leetcode-数组系列6
LeetCode 674.最长连续递增序列,482.棒球比赛,494.数组的度,704.二分查找,705.设计哈希集合,706.设计哈希集合
2021年终总结
b9cc9643baf4dcc59b37da2f24103eaccefe58073ae15acb17a69c6037edc46835b3676fb8a7e3c080445afa54ab9f51a1ba045389f78007e66dd9df1930fc7588e86d5b4bef116565b313a514b6320e9ffe9fcc178626051be8af7a083e71a4c9cfcbf702b34a5c192cb6c3b7ba38d84a7de8374fd56e22775febeea1edc9f82d17029e8c1f0b438f9389e16a9540be32b769dacb3937a1364b732f6c7f22913009f9c81b4a9abb68f498d1d3bd000ba425adbe6fe62a14e81654dc29c9103111bfa9f2535a3537680ef1b00eae2c67cdf880982fc1e70ff7e852607497402b85d4914238ab47631954361efaf160f8f0833235c9d119bf8 ...
记一次MySQL查询优化
多表查询导致的慢查询,从几分钟优化到几秒,再优化到几毫秒;笛卡尔积扫描几十亿数据到扫描几十条数据的最终解决方案
自动编译proto文件
前言你是否和我一样厌烦了无休止的protobuf编译,是否对protoc的命令深恶痛绝,如果有,那请继续看下去。初接触protobuf的我,对他的各种编译命令深恶痛绝,生涩难记。
在同事的帮助下,弄了个编译proto的库:proto_build,每次改完proto文件,直接执行就完事,再也不用去输入各种乱七八糟的命令,简直爽到飞起。
使用Goland实现自动编译Jetbrains全家桶提供了file watcher的功能,可以实现对文件的监听,文件发生更改时可以执行某些操作,这与我们开发的程序结合,即可解放双手,实现自动编译。
下载proto_build程序包,或下载源码后编译,打开Jetbrains家的ide,这里以Goland为例:
Preferences → Tools → File Watcher
新建File Watcher:点击 + → <custom>
选择监听文件类型Protocol Buffer,文件监听范围(根据自己实际需求选择,这里我选择当前项目),选择上面下载或自行编译的运行程序,工作目录选择当前项目所在目录即可。
编辑proto文件,查看 ...