MySQL数据库的优化

一、数据类型的优化

使用什么样的类型更合适,性能更快

  • tingint(255)、smallint、int、bigint(上千万上亿)考虑空间的问题和范围的问题
  • char、varchar 存储字符串长度是否固定
  • enum 特定、固定的分类可以使用enum存储,效率更快
  • IP地址的存储 ip2long 整型存储

tinyint
从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据。存储大小为 1个字节。
unsigned 是从 0 到 255 的整型数据。
所以建表的时候 只能是tinyint(3),哪怕你建tinyint(100),他最大还是3位这么多。
smallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。
unsigned 是从 0 到 65535 的整型数据。
所以建表的时候 只能是smallint(5),哪怕你建smallint(100),他最大还是5位这么多。
int
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647)的整型数据(所有数字).存储大小为 4 个字节。
unsigned 是从 0 到 4294967296 的整型数据。
所以建表的时候 只能是int(10),哪怕你建int(100),他最大还是10位这么多。
bigint
从 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1(9,223,372,036,854,775,807) 的整型数据(所有数字)。存储大小为 8 个字节。
unsigned 是(自己算吧)
所以建表的时候 只能是bigint(20),哪怕你建bigint(100),他最大还是20位这么多。

二、索引的优化

建立合适的索引

  • 索引不是越多越好,在合适的字段是创建索引
  • 符合索引的前缀原则
  • like查询%问题 %不能在前,可以使用全文索引
  • 全表扫描优化 如果MySQL估计使用索引比全表扫描更慢,会放弃使用索引
  • OR条件使用情况,如果or前的条件中的列有索引,后面的没有,索引都不会被用到
  • 字符串类型索引失效的情况

三、SQL语句的优化

1、优化查询过程中的数据访问
  • 使用limit
  • 返回列不适用
2、优化长难句的查询语句
  • 变复杂为简单
  • 切分查询
  • 分解关联查询
3、优化特定类型的查询语句
  • 优化count()
  • 优化关联查询
  • 优化子查询
  • 优化group by 和distinct
  • 优化limit和union 记录上次查询最大ID

四、存储引擎的优化

尽量使用InnoDB
InnerDB和MyISAM的区别

  • InnerDB支持事务
  • InnerDB支持行锁
  • InnerDB支持外键
  • InnerDB支持崩溃后的安全恢复
  • InnerDB数据存储在共享表空间

五、数据库结构设计的优化

1、分区操作

通过特定的策略对数据表进行物理拆分
对用户透明
Partition by

2、分库分表

水平拆分
垂直拆分

六、数据库服务器架构的优化

  • 主从复制
  • 读写分离
  • 双主热备
  • 负载均衡 lvs的三种基本模式实现负载均衡,mycat数据库中间件实现负载均衡

你可能感兴趣的:(MySQL数据库的优化)