zoukankan      html  css  js  c++  java
  • 数据库优化

    数据库优化

    • 思路:先优化查询语句,再备份后修改
    • 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年失效
    • 业务逻辑尽量不要给数据库处理,在程序中处理,逻辑单边化独立化
  • 相关阅读:
    数据结构基础
    基于TCP的通信 客户端
    hduacm 5255
    uva 10668
    hduacm 5104
    uva 10491
    Hibernate之性能优化
    Hibernate基础知识
    Hibernate入门
    Struts2之Crud综合实例
  • 原文地址:https://www.cnblogs.com/hellangels333/p/8916385.html
Copyright © 2011-2022 走看看