数据库设计与优化


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

主键索引:

      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】判断过滤的量


散列值:不建议加索引

连续值:加索引

posted @ 2020-03-30 10:39  小海_macro  阅读(296)  评论(0编辑  收藏  举报