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、索引长度直接影响索引文件的大小,影响增删改的速度,并间接影响查询速度(占用内存多)
相关文章
- 论MySQL何时使用索引,何时不使用索引
- mysql window服务重新安装
- 下载mysql server安装包的时候,不登录oracle账号,实现下载
- mysql数据库中,查看当前支持的字符集有哪些?字符集默认的collation的名字?
- MySQL进阶篇(03):合理的使用索引结构和查询
- MySql 索引数据结构,千万级大表,关于性别及年龄字段是否需要加索引?
- Oracle数据库:oracle数据表格dmp,sql,pde格式导入与导出,视图、序列、索引等对象的导出,oracle完结,后续开启mysql的学习
- 【MySQL进阶-01】深入理解mysql索引本质
- ElasticSearch索引 和MySQL索引那个更高效实用那个更合适
- mysql 高级语法手记
- mysql 添加列的索引
- mysql 索引策略
- MySQL 优化之 index merge(索引合并)
- mysql,sql server,oracle 唯一索引字段是否允许出现多个 null 值?
- MySQL 索引详细解读
- 如何高效高性能的选择使用 MySQL 索引?
- MySQL利用mysqldump在线修复或新增从库
- Mysql B+树索引的推演
- MySQL创建方法错误:This function has none of DETERMINISTIC, NO SQL
- mysql索引
- 【重磅推荐】MySQL大表优化方案(最全面)
- mysql如何查看索引使用情况以及优化 - guols0612
- Mysql_mysql force Index 强制索引
- oracle数据库兼容mysql的差异写法
- (1.2)mysql 索引概念
- Mysql 查询优化
- mysql组合索引与字段顺序
- 【MySQL】选错索引的原因分析
- 高性能 MySQL(七):11个高性能的索引策略
- MySQL - 聚簇索引和辅助索引