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、索引长度直接影响索引文件的大小,影响增删改的速度,并间接影响查询速度(占用内存多)

  • 相关阅读:
    【SQL查询】查询列中使用条件逻辑_case when then end
    【SQL查询】查询的列起别名_AS
    【SQL查询】查询的值为空时,给出默认值_NVL函数
    工薪阶层理财建议
    软件文档编写_软件开发过程中的文档
    等价边界值测试_日期
    【登录】测试用例
    来纪中的第一天
    普及C组第二题(8.1)
    普及C组第一题(8.1)
  • 原文地址:https://www.cnblogs.com/linguoguo/p/5175429.html
Copyright © 2011-2022 走看看