zoukankan      html  css  js  c++  java
  • 《Mysql

    一:索引概述?

      - 数据库里的数据是以文件的形式存储的,里面放了我们的各种数据。就和一本书一样。

      - 通俗的来说,索引就像一个书签一样,可以直接帮我们找到内容,避免了我们一页一页找。

      - 就像你不会给你的一本书上的每一页都加上索引一样,索引的建立和维护也需要考虑。

    二:索引的优点/缺点?

      - 优点

        - 使用索引的列,会在查询时大大的加速查询速度。

        - 大大减少服务器需要扫描的数据量。

        - 帮助服务器避免排序和临时表

        - 将随机 I/O,变为 顺序I/O

      - 缺点

        - 创建索引和维护索引要耗费间,并且随着数据量的增加所耗费的时间也会增加

        - 索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值

        - 当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。

    三:索引的使用原则?

       - 索引适合在中到大型的表中建立会高效

        - 对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引。

      - 数据量小的表,使用全表扫描查询会更高效。

        - 数据量小的表最好不要使用索引

        - 因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。

      - 超过500W的表,应该考虑使用 分区/分表 进行处理

    四:如何建立索引 (B+Tree)?

      - 查看当前表的索引

        - SHOW INDEX FROM 表名 G;

      - 建立索引

        - 单列索引

          - CREATE INDEX 索引名 ON 表(字段);

        - 前缀索引

          - CREATE INDEX 索引名 ON 表(字段(长度));

        - 唯一索引

          - CREATE UNIQUE INDEX 索引名 ON 表(字段);

        - 主键索引

          - ALTER TABLE `表名` ADD PRIMARY KEY (`字段名`);

        - 多列索引

          - CREATE INDEX 索引名 ON 表(字段1, 字段2, ...);

    五:高性能的索引策略

      - 限制每张表的索引数量

        - 一张表不要超过五个,索引不是越多越好,会提高/也会降低索引

        - 禁止给每一列建立索引,并不會获得很好的效果

      - 对于 Varchar/Char/Text 等字段,最好使用 前缀索引

        - 优点

          - 前缀索引能有效减小索引文件的大小,提高索引的速度。

        - 缺点

          -  不能在 ORDER BY 或 GROUP BY 中使用前缀索引。

          -  也不能把它们用作覆盖索引(Covering Index)。

        - 建立

          - 为了创建前缀索引的合适长度,确定区分度,建立前缀索引

          - SELECT COUNT(DISTINCT LEFT(column_name, $length)) / COUNT(*) FROM table_name;

      - 在哪些列上建立索引?

        - 在 select/update/delete SQL中的 where 条件中建立索引

        - 在 order by / group by 字段上建立索引

      - 多列索引的建立

        - 将区分度最高的列放在索引最前列(不是绝对,需要根据具体的情况来定)

        - 尽量将查询包含在多列索引中

        - SELECT COUNT(DISTINCT column_name) / COUNT(*) FROM table_name;

      

      - 对于联合索引来说,要遵守最左前缀法则

        - 举列来说索引含有字段id、name、school,可以直接用id字段,也可以id、name这样的顺序,但是name;school都无法使用这个索引。

        - 所以在创建联合索引的时候一定要注意索引字段顺序,常用的查询字段放在最前面。

      

  • 相关阅读:
    基于Docker搭建分布式消息队列Kafka
    [转]JAVA 开发环境设置(简单易懂)
    微信分享地址参数记录(出于防止微信刷票而产生的学习记录)
    万网开启二级站点【原创】
    PHP
    [转]什么是RSS
    html页面缓存(浏览器)
    [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)【转】
    Jquery中$.get(),$.post(),$.ajax(),$.getJSON(),$.getScript(),$.load()的用法总结【转】
    JQuery中$.load()方法的用法和分析【转】
  • 原文地址:https://www.cnblogs.com/25-lH/p/8677645.html
Copyright © 2011-2022 走看看