zoukankan      html  css  js  c++  java
  • 索引

    一:索引类型

    1. 普通索引
    2. 唯一索引
    3. 主键索引
    4. 组合索引
    5. 全文索引

    1:直接创建普通索引

    1 create index index_lname on person (lname);

    2:创建唯一索引

    1 create unique index person_index_unique_fname on sql_test.person (fname);

    3:主键索引

    是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引:

    4:组合索引

    create index person_index_fname_age on person (fname, age);

    5:全文索引

    主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用,而不是一般的where语句加like。它可以在create table,alter table ,create index使用,不过目前只有char、varchar,text 列上可以创建全文索引。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE index创建fulltext索引,要比先为一张表建立fulltext然后再将数据写入的速度快很多。

    开启慢日志查询

    1 show variables like 'slow_query%';
    2 show variables like 'long_query_time';
    3 set global slow_query_log='ON';   开启慢日志查询
    4 set global long_query_time=1; 设置慢日志时间

    查询SQL执行时间

    1 show profiles;
    2 开启
    3 show variables like '%pro%';
    4 set profiling = 'ON'

     使用explain去分析SQL语句

    使用到索引

    1 explain select * from person
    2 where fname like 'q%' and age>10;

     没有使用到索引

    1 explain select * from person
    2 where fname like '%q%' and age>10;

     概要描述:
    id:选择标识符
    select_type:表示查询的类型。
    table:输出结果集的表
    partitions:匹配的分区
    type:表示表的连接类型
    possible_keys:表示查询时,可能使用的索引
    key:表示实际使用的索引
    key_len:索引字段的长度
    ref:列与索引的比较
    rows:扫描出的行数(估算的行数)
    filtered:按表条件过滤的行百分比
    Extra:执行情况的描述和说明

     覆盖索引

    再来看看什么是覆盖索引,有下面三种理解:

    • 解释一: 就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖。
    • 解释二: 索引是高效找到行的一个方法,当能通过检索索引就可以读取想要的数据,那就不需要再到数据表中读取行了。如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫 做覆盖索引。
    • 解释三:是非聚集组合索引的一种形式,它包括在查询里的Select、Join和Where子句用到的所有列(即建立索引的字段正好是覆盖查询语句[select子句]与查询条件[Where子句]中所涉及的字段,也即,索引包含了查询正在查找的所有数据)。

      不是所有类型的索引都可以成为覆盖索引。覆盖索引必须要存储索引的列,而哈希索引、空间索引和全文索引等都不存储索引列的值,所以MySQL只能使用B-Tree索引做覆盖索引

      当发起一个被索引覆盖的查询(也叫作索引覆盖查询)时,在EXPLAIN的Extra列可以看到“Using index”的信息

    explain select lname from person where 1=1 and  lname='Dave'

    explain select lname from person where 1=1 and  id=999998

  • 相关阅读:
    插入排序Java实现
    WMI控制IIS(2)
    WMI控制IIS
    C语言中用qsort()快速排序
    list_for_each引起的问题
    c++数组地址
    Valgrind 使用简单说明检查内存泄露
    firefox 在UBUNTU下编译
    内存泄漏检测umdh
    ubuntu GIT 安装与使用
  • 原文地址:https://www.cnblogs.com/bulrush/p/12534081.html
Copyright © 2011-2022 走看看