zoukankan      html  css  js  c++  java
  • MySQL 索引

    1、为什么会有索引
    当数据保存在磁盘介质上时,它是作为数据库存放的,每条数据是作为一个整体存储的。磁盘存放数据的数据结构类似于链表,即,每个节点除了包含本身数据,还包含一个指向下个节点的指针。相关数据逻辑相连,物理地址可以任意。
    那么问题来,如果一个表有10W个数据,如果没有索引,那么当你按某个条件查找数据时候,系统只能遍历数据,直到找到你需要的数据。
    如果你把这个字段做成了索引,系统会把这个索引字段按照一定的规则制成一个单独的数据结构,当你需要按照这个字段查找时候,系统会在这个索引数据结构二分查找,把原来复杂度为o(N)降为o(log2N),大大提高查询速度。
    2、索引
    2.1 单列索引
    2.1.1 普通索引
    普通索引是最基本的索引。由关键字KEY或INDEX定义的索引,加快对数据的访问速度。对于那些经常的查询条件(WHERE column=)或排序条件(ORDER BY column)的字段,应该创建索引。
    CREATE INDEX 索引名 ON 表名(字段名);
     
    ALTER TABLE 表名 ADD KEY 索引名(字段名);
    ALTER TABLE 表名 ADD INDEX 索引名(字段名);
    2.1.2 唯一索引
    普通索引允许在数据列中包含重复的值,比如,名字,这个项可以重复。对于一些不能重复的值,比如,个人的身份证号,应该设置为UNIQUE INDEX 把他设置为唯一索引。
    ALTER TABLE people ADD UNIQUE INDEX 索引名(字段名);
    2.1.3 主索引
    主键会被默认添加一个索引,这就是“主索引”。主索引与唯一索引的唯一区别是:前者在定义时使用的关键字是PRIMARY而不是UNIQUE。主键索引一定是唯一性索引,唯一性索引不一定是主键索引。
     
    ALTER TABLE people ADD PRIMARY KEY 索引名(字段名);
    2.2 组合索引
    包含多个字段的索引。
     
    CREATE INDEX 索引名 ON 表名(字段名,字段名);
     
    例如:
      CREATE INDEX all_index ON people(last_name,first_name,gender);
     
     
    在使用查询的时候遵循MySQL组合索引的“最左前缀”,什么是最左前缀:where 时的条件要按照建立索引时候字段的排序方式。比如,INDEX(A,B,C)可以被当做A或(A,B)的索引来使用,但不能当做B,C或(B,C)的索引来使用。
    Where A= ‘xxx’ and B like = ‘aa%’ and C=’sss’ 改查询只会使用索引中的前两列,因为like是范围查询。范围查询不算在索引内,因为索引使用 hash值来计算,模糊条件无法计算得到hash值。
     
    2.3 全文索引
    文本字段(text、blog)建立索引时候需要指明索引的长度。如果对文本字段进行模糊查询,即 where column like '%xx%',因为是模糊查询,所以索引会失效。
    可以设置全文索引:
     
    ALTER TABLE 表名ADD FULLTEXT(字段名1, 字段名2)
     
    有了全文索引,就可以利用索引来进行关键字查询了。
     
    ELECT * FROM tablename WHERE MATCH(column1, column2) AGAINST(‘xxx′, ‘sss′, ‘ddd′)
     
    查询出column1 和 column2 中包含这些关键字的记录。
     
  • 相关阅读:
    C语言面向对象编程(五):单链表实现(转)
    pthread_barrier_init,pthread_barrier_wait简介(转)
    Linux信号(signal) 机制分析(转)
    Linux 进程间通信 --- 信号通信 --- signal --- signal(SIGINT, my_func); --- 按键驱动异步通知(转)
    Linux 多线程环境下 进程线程终止函数小结(转)
    批量杀进程 ps awk grep
    C++中的INL(转)
    gdb调试多进程和多线程命令(转)
    转: 基于netty+ protobuf +spring + hibernate + jgroups开发的游戏服务端
    转:全栈工程师的知识栈列表
  • 原文地址:https://www.cnblogs.com/moongeek/p/7452729.html
Copyright © 2011-2022 走看看