-
Notifications
You must be signed in to change notification settings - Fork 22
数据库优化
L edited this page Aug 17, 2020
·
7 revisions
善用索引,读取数据创建索引、写入数据删除索引
即写入数据之前,先删除索引,写完之后再创建索引
参考资料:
sql索引优化-force index
当只要一行数据时使用 LIMIT 1
避免 SELECT * 每次select * 都会查一次系统表,先查表结构,再查值
永远为每张表设置一个ID
使用 ENUM 而不是 VARCHAR
拆分大的 DELETE 或 INSERT 语句
越小的列会越快
尽可能的使用 NOT NULL
从 PROCEDURE ANALYSE() 取得建议
EXPLAIN 你的 SELECT 查询
千万不要 ORDER BY RAND()
查找数据尽可能依赖带索引的数据结构
分析业务逻辑,优化业务处理步骤
串行数据性能发挥至极致,可以引入并行。根据情况,考虑并行读、并行写
并行引起的并发问题尽量通过分区和复制进行规避
并行处理数据的时候可能有并发冲突,比如订单数据处理,下单->支付->妥投各种订单环节的计算实际上有很大数据冲突,这个要处理一般就是加锁什么的
但是你可以做一下分区,同一个订单相关的数据hash到固定线程处理,比如对订单尾号取模,这样就可以用单线程思路处理多线程问题,只要分区策略是均匀的
使用批处理替代循环处理,降低io
eg.有一堆集合要从redis取数据,循环调用get命令比使用mget一次取多个key,低了一个数量级
假设redis 网络延返 1ms,那10次get调用,10ms
一个mget,只需一次网络延返,只需要1ms,不考虑redis内部的计算