mysql优化的方向

数据库的缓存(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数据库中间件实现负载均衡
posted @ 2022-08-11 19:00  潘潘潘的博客  阅读(43)  评论(0)    收藏  举报