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会自己去调整位置。但是没有必要这样,直接建立同样顺序的索引就行了。

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

  • 相关阅读:
    PATA 1071 Speech Patterns.
    PATA 1027 Colors In Mars
    PATB 1038. 统计同成绩学生(20)
    1036. 跟奥巴马一起编程(15)
    PATA 1036. Boys vs Girls (25)
    PATA 1006. Sign In and Sign Out (25)
    读取web工程目录之外的图片并显示
    DOS命令
    java连接oracle集群
    servlet
  • 原文地址:https://www.cnblogs.com/hustdc/p/8905966.html
Copyright © 2011-2022 走看看