zoukankan      html  css  js  c++  java
  • mysql的索引

    1 哪些地方要用到索引

    只要设计到查询操作都会用到索引,如果不用索引的话,就要进行全表遍历了。

    关于查询可以参考下面的博客:

    https://www.cnblogs.com/whgk/p/6149009.html

    2 mysql索引的种类及其创建命令

    2.1 主键索引

    一种特殊的唯一索引,不允许空值,因为主键本身就不允许空值。

    ALTER TABLE <table_name> ADD PRIMARY KEY (<column_name>);

    2.2 唯一索引

    被索引的列的值必须是互异的,即必须是唯一的。

    ALTER TABLE <table_name> ADD UNIQUE(<column_name>);

    2.3 普通索引

    最基本的索引,没有限制。

    ALTER TABLE <table_name> ADD INDEX <index_name>(<column_name>);

    2.4 全文索引

    对文本数据建立全文索引,目的是进行关键字搜索,然后返回包含该关键字的行。

    ALTER TABLE <table_name> ADD FULLTEXT (<column_name>);

    2.5 联合索引

    对多列创建索引,先对第一列创建索引,然后对于第一列相同的所有的行的第二列创建索引,依次类推,也就是说,以后面的列作为查询条件时,必须要建立在前面的列的基础上,单独使用后面的列作为查询条件时联合索引是失效的。

    ALTER TABLE <table_name> ADD INDEX <index_name>(<column1_name>, <column2_name>);

    3 mysql的两种索引结构

    3.1 B+树索引

    不光适合于单记录查询,也适合于范围查询,因为所有的记录都位于底层节点,并且是按照顺序使用链表连接存放的,这样的话,只要找到了返回中的第一个记录,然后遍历就找到了满足条件的所有记录。

    3.2 hash索引

    只适合单记录查询,因为各条记录都是被hash分散分布的。

    4 对查询条件中的列建立索引

    5 建立的索引不起作用的情况

    第一,复合索引,但是查询条件不满足最左原则

    比如建立的索引是a,b,但是只是以b为条件,那么该复合索引就不起作用。

    第二,多个or条件,其中的一个没有索引

    6 建立索引的原则

    第一,最左前缀原则,mysql会一直向右匹配直到遇到范围查询,也就是说,它会从左到右遍历条件去找相应的索引。

    比如 a=1 and b=2 and c>3 and d =4,mysql找到c>3的时候就停止找索引了。

    第二,=可以乱序,a=1 and b=2 and c=3,索引可以设计成(a,b,c)或者(a,c,b)或者(b,c,a)等,因为mysql会自己去调整位置。但是没有必要这样,直接建立同样顺序的索引就行了。

    第三,选择区分度高的列作为索引。

  • 相关阅读:
    CF 1006C Three Parts of the Array【双指针/前缀和/后缀和/二分】
    经验笔记二
    CF 1006B Polycarp's Practice【贪心】
    CF 1003D Coins and Queries【位运算/硬币值都为2的幂/贪心】
    CF 1003C Intense Heat【前缀和/精度/双层暴力枚举】
    CF 1003B Binary String Constructing 【构造/找规律/分类讨论】
    CF 1005C Summarize to the Power of Two 【hash/STL-map】
    CF 1005B Delete from the Left 【模拟数组操作/正难则反】
    CF 1005A Tanya and Stairways 【STL】
    CF 1009A Game Shopping 【双指针/模拟】
  • 原文地址:https://www.cnblogs.com/hustdc/p/8905966.html
Copyright © 2011-2022 走看看