我们知道, MySQL DB 的数据是存放在磁盘上的,其读写速度无法和存放在内存中的 redis 相比,当 MySQL 记录数过大时,增删改查时系统的吞吐量会非常的大,数据增删改查的性能会急剧下降。为了改善以上情况,我们需要对 MySQL 进行相关优化,可以参考以下步骤来优化:
TINYINT 、 SMALLINT 、 MEDIUM_INT 作为整数类型而非 INT ,如果非负则加上 UNSIGNEDVARCHAR 的长度只分配真正需要的空间TIMESTAMP 而非 DATETIME ,INET_ATON(str),INET_NTOA(number) )WHERE 和 ORDER BY 命令上涉及的列建立索引,可根据 EXPLAIN 来查看是否用了索引还是全表扫描WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描UNIQUE ,由程序保证约束like %xx 或者 like %xx% 这两种方式都会造成索引失效;从以上索引失效的场景分析,我们可对相关查询的 SQL 语句进行以下优化:
SELECT id WHERE age + 1 = 10 ,任何对列的操作都将导致表扫描,它包括数据库教程函数、计算表达式等等,查询时要尽可能将操作移至等号右边SELECT *OR 改写成 IN : OR 的效率是n级别, IN 的效率是log(n)级别,in的个数建议控制在200以内%xxx 式查询JOIN'123' 和 '123'<