数据库优化

数据库优化

  • 思路:先优化查询语句,再备份后修改
  • ACID: 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必须要具有这四种特性

1.查询时候尽量不使用*

2.查询并添加索引/外键(在navcate中直接添加查询语句的条件项)

例:select * from table where age>18 and sex="男"
给age和sex加外键,优先检索前面的age【二叉树最小值】

3.设计合理的sql查询条件,根据实际情况使用and

4.使用‘or’进行查询时候尽量不要使用“or”,尽量使用“union all”

注:一旦用or就不走索引了,union all 是走索引,先一个表单独查,再做并集

5.使用like模糊查询(语句中有%)

尽量不要在需要查询的关键字之前加%,因为这样就不走索引了

6.使用count时,效率最低到高的顺序是 count(字段名) <count(*)<count(1)

7.除了count、average等尽量不要用sql自带的函数

因为:自带的函数不走索引

8.使用sql语句优化工具:exlain/desc【一组命令工具,得查下具体用法】

用法:exlain 正常sql语句

9.数据库设计原则

9.1尽量遵循三大范式
    字段类型
        varchar(长度+1) 
            用户名
            描述
            邮箱
            手机号
        char
            手机号
            密码
        int
            性别(int/tinyint) 数字比字符查询速度快
9.2所有字段尽量设计成NotNull
9.3表引擎尽量用Innodb
    Innodb支持事务,MyIsam不支持
    Innodb是行锁,MyIsam是表锁  锁是防止多个sql语相互冲突
    Innodb不支持全文检索,MyIsam支持全文检索

10.对于查询频率很高的操作尽量使用MemCache(第三方的数据库缓存工具)和redis(内存数据库,非关系型数据库,自带去重)

MemCache 适合不太频繁改变sql语句的查询,位于应用与数据库之间
频繁写入的数据库不适合用关系型数据库,适合用redis - 例:购物车功能、浏览次数统计;注:通常redis和mysql一起使用,redis负责频繁读写的功能

11.分表(最后再考虑这个,需要修改对应的查询语句)

按列分 - 分离数据项
按行分 - 逻辑分区

12.多个库,读写分离

主从设置

13.mysql配置

14.硬件配置

cpu使用率、应用程序所占进程、mysql进程

15:其他

  • 当数据太多时候不要在高峰期添加索引,索引是将字段加到一张索引表,对导致短暂卡顿
  • 时间戳现在是10位或13位(带毫秒),到2030年失效
  • 业务逻辑尽量不要给数据库处理,在程序中处理,逻辑单边化独立化
posted @ 2018-04-23 10:35  Leq123  阅读(291)  评论(0编辑  收藏  举报