zoukankan      html  css  js  c++  java
  • MySQL 索引的使用

    一、or 的使用

    (1)MySQL版本大于 5.x 的会使用 index merge 功能,即可以将多个单列索引集合起来使用,不过在查询时使用 or 的话,引擎为 myisam 的会开启 index merge,而 InnoDB 的则不会开启,从而导致全表搜索;

    二、order 的使用

    不是 order by 一个设置为索引的字段,这个查询就一定会用到 index ,搞不好会是 using filesort,有几个地方需注意:

    (1)如果没有 where 条件,查询的字段没有覆盖到索引(多出一个也不行),order 就会 using filesort,所以选择的字段最好有设置索引,这样才会 using index 来执行;

    (2)如果有 where 条件,比如 where type = 1 order by type asc,type 为索引,order 会使用到索引; 如果 where type = 1 order by name asc,即使 type、user 都是索引,也无法使用到索引,依旧是 using filesort;

    (3)在没有where 查询的时候 order by id(主键,必须是主键), 有 where 查询的时候,order by (索引) 字段。

    三、索引用于函数

    (1)where 中字段若用于函数,索引无法起到作用;

    四、索引 范围查询

    (1)!=、>=、>、<、<=、in、like 等符号使用时均属于范围查询,最左前缀原则在范围查询的字段后面无法起作用;

    五、索引长度计算及优化

    1、所有的索引字段,如果没有设置not null,则需要加一个字节。

    2、定长字段,int占四个字节、date占三个字节、char(n)占n个字符。

    3、对于变成字段varchar(n),则有n个字符+两个字节。

    4、不同的字符集,一个字符占用的字节数不同。latin1编码的,一个字符占用一个字节,gbk编码的,一个字符占用两个字节,utf8编码的,一个字符占用三个字节。

    5、索引长度直接影响索引文件的大小,影响增删改的速度,并间接影响查询速度(占用内存多)

  • 相关阅读:
    android 68 单元测试
    android 67 生成和解析xml
    android 66 sharedperference的使用
    android 65 文件访问权限
    android 64 sd卡读写的操作
    EditText操作收集
    android Fragments详解六:处理fragement的生命周期
    Context
    android 63 Fragment
    在Centos安装oracle_11gR2进度68%"Error in invoking target mkldflags ntcontab.o nnfgt.o of makefile..”
  • 原文地址:https://www.cnblogs.com/linguoguo/p/5175429.html
Copyright © 2011-2022 走看看