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


    索引:目的是加快查询速度

    主键索引:

          1.通常自带索引

          2.唯一索引

          3.查询效率最高的索引

    【note】建议大家尽可能使用主键索引。

    唯一索引:

    【1】如果某一列需要考虑到唯一性,那么可以建索引。

    【2】唯一索引建议创建在数值上。

    常规索引:最普通的索引。

    全文索引:

    【1】只适用于 char text等字符串类型的数据上(MYISAM数据引擎)

    联合索引:

    【1】不属于索引类型。

    【2】属于索引的应用方式。

    【注意】

    1:一般来说,一张表的索引,不超过表列数24%

    【1】不要对经常变动的数据加索引

    【2】小数据量的表建议不要加索引

    【3】查询字段位置

                (>100条的数据需要加索引)

    ——索引需要经常进行维护。【数据量更新后】——如:进行大量的增删改以后。


    【非聚集索引】——在索引树当中,只保存数据地址。典型的代表:MYISAM

    【聚集索引】——索引就是数据{他们二者是在一起的}

    【覆盖索引】——不需要经过搜索主键索引,直接就能命中目标的索引。


    Id/select_type/table:

    【1】判断SQL的执行先后

    【2】判断是哪个SQL在执行


    跟具体使用的数据库优化器有关:

    执行计划的type:

    【1】System:查询系统内存中的数据,MYSIAM中只有一条数据

    【2】Const:直接命中主键,效率最高!{id=1类型}

    【3】Range:范围查询{id>10类型}——是在索引上的范围查询

    【4】Eq_ref:不管是主键还是外键,只要是一对一的关系。

    【5】ref:非主键非唯一索引等值扫描{当一对多的情况下,eq_ref会降级}

    【6】index:覆盖索引——是在索引上的全表扫描

    【7】ALL:不在索引上的全表扫描;{至少查2次!}


    索引失效:

    XX【1】OR的两边都需要索引


    mysql的二级缓存:已查询sql为key,如果已查询数据的数据key相同,则直接从缓存中获取数据。


    where 查询数据默认是:从右到左的顺序解析where子句。所以过滤掉大量数据的条件建议放在where子句之后。

    explain字段:【所以往往:将过滤多的放置后面,然后依次是过滤少的。】——filetere字段:过滤掉的百分比

    【对于索引可能会失效的放置在where子句的左侧】

    隐式转换:当两张表字符集不同的时候进行查看。


    索引并不是越多越好,虽然可以提高select的效率,但同时降低了insert 和 update的效率。【insert 和 update 有可能会重建索引】

    分页优化



    优化SQL的步骤:

    【1】常用字段

    【2】选择在哪些字段上加索引

    【3】判断过滤的量


    散列值:不建议加索引

    连续值:加索引

  • 相关阅读:
    C++ 顺序表实现
    C++ 第三十四天
    C++ 第三十三天
    机器学习相关- 学习资料收集
    【Debian 8.8】Java 8 安装以及环境变量配置
    算法导论(第三版)练习 1.2-1 ~ 1.1-3
    条款33: 明智地使用内联
    条款32: 尽可能地推迟变量的定义
    条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用
    【Nginx】进程模型
  • 原文地址:https://www.cnblogs.com/macro-renzhansheng/p/12597036.html
Copyright © 2011-2022 走看看