合理使用索引(改善查询,减慢更新,索引一定不是越多越好)
字符字段必须建前缀索引
`pinyin` varchar(100) DEFAULT NULL COMMENT '小区拼音',
KEY `idx_pinyin` (`pinyin`(8)),
不在列上做运算
Innodb主键推荐使用自增列(主键建立聚簇索引,主键不应该被修改,字符串不应该做主键)
不用外键(由程序保证约束)
SQL语句尽可能简单(一条SQL只能在一个cpu运算,大语句拆小语句,减少锁时间,一条大SQL可以堵死整个库)
简单的事务(事务时间尽可能短,坏的代码案例:上传图片事务)
避免使用trigger/func(触发器、函数不用,由客户端程序取而代之)
不用select *(消耗cpu、io、内存、带宽,这种程序不具有扩展性)
or改写为in(针对同一字段)
where a=1 or a=2 改为 where a in(1,2)
or改写为union(针对不同字段 )
where a=1 or b=1 改:select * from xxx where a=1 union select * from xxx where b=1
避免负向%查询
where a like '%北京% '
count函数不要使用在字段值可为null的字段上面
减少count(*)
limit高效分页(limit越大,效率越低)
limit 10000,10 改为 where id >xxx limit 11
使用union all替代union(union有去重开销)
发生高并发时,数据库少用两个表以上的join
使用group by 去除排序加快效率
例如:group by name 默认是asc排序
改:group by name order by null 提高查询效率
请使用同类型比较(避免转换导致索引丢失)
使用 LOAD DATA 导入命令比 insert 速度快20倍左右(适合导入大量测试数据)
打散大批量更新(例如:在凌晨空闲时期更新执行)
https://blog.csdn.net/y_bccl27/article/details/129343773