🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] > [msql 优化的详细方法](https://segmentfault.com/a/1190000006158186) ## 数据库的优化 数据库的缓存(memcache 缓存,redis 缓存等) 分库分表、分区操作 读写分离 负载均衡 ## 数据表数据类型优化 ### 字段使用什么样的数据类型更合适 tinyint (0-255) smallint , bigint char,vachar enum 特定、固定的分类可以使用enUm存储,效率更快 IP地址的存储 //用 php 的 `ip2long('192.168.1.38'); //3232235814` 对字段进行 not null 这样,存储的字段就不会有 null 值 ,只有空值 ### 索引优化 索引不是越多越好,在合适的字段上创建合适的索引 复合索引的前缀原则 复合索引的前缀原则 lke查询%的问题(% 在前如:`%name` 则索引失败) 全表扫描优化 or条件索引使用情况 字符串类型索引失效的问题(如字符串类型的字段必须要加引号查询) ### SQL语句的优化 优化查询过程中的数据访问 优化长难句的查询语句 优化特定类型的查询语句 使用 Limit 返回列不用* 变复杂为简单 切分查询(如删大量数据时,可分多次删除) 分解关联查询 优化 count() (如对统计数据单独存放在一个字段,而不是进行 count() 统计) 优化关联查询 优化子查询 优化 Group by和 distinct 优化 limit和 union ### 存储引擎优化 尽量使用 Inno DB存储引擎 ### 数据表结构设计的优化 #### 分区操作 通过特定的策略对数据表进行物理拆分 对用户透明 partition by 对新建表进行分区 ``` CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT NOT NULL, store_id INT NOT NULL ) PARTITION BY RANGE (store_id) ( PARTITION p0 VALUES LESS THAN (6), PARTITION p1 VALUES LESS THAN (11), PARTITION p2 VALUES LESS THAN (16), PARTITION p3 VALUES LESS THAN MAXVALUE ); ``` 对已有表进行分区 ``` ALTER TABLE user PARTITION BY RANGE (id) ( PARTITION p_Apr VALUES LESS THAN (2), PARTITION p_May VALUES LESS THAN (4), PARTITION p_Dec VALUES LESS THAN MAXVALUE ); ``` #### 分库分表 水平拆分 垂直拆分 ### 数据库服务器架构的优化 - 主从复制 - 读写分离 - 双主热备 - 负载均衡: 通过LVS的三种基本模式实现负载均衡 My Cat数据库中间件实现负载均衡