10.Mysql索引
10.索引的设计和使用
10.1 索引概述
BTREE索引:Mysql(MyIASM和Innodb)默认的索引类型。
前缀索引:对索引字段的前N个字符创建索引。N的最大取值和存储引擎有关,MyIASM支持最大前缀长度为1000字节,Innodb引擎支持最大前缀长度为767字节。
全文索引:可用于全文搜索。仅有MyIASM支持全文索引,且只限于CHAR、VARCHAR、Text类型的列。
空间类型索引:仅有MyIASM支持空间类型索引,索引列必须为非空。
HASH索引:仅有MEMORY支持HASH索引。
创建索引语法:
create [unique | fulltext | spatial] index index_name [using index_type] on table_name (col_name[(length)] [ASC|DESC]);
说明:
index_type取值为BTREE、RTRE、Hash
例子:
create index idx_emp_ename on emp (ename(5));
分析查询语句,检查是否使用了索引:
explain select * from emp where ename='SCOTT';
删除索引语法:
drop index index_name on table_name;
例子:
drop index idx_emp_ename on emp;
10.2 设计索引的原则
最适合索引的列是出现在where子句中的列,或连接子句中指定的列,而不是出现在select关键字后的选择列表中的列;
考虑某列中值的分布,索引的列的基数越大,索引的效果越好;
使用短索引,对字符串索引时应该指定一个前缀长度,即前N个字符就能大致区分唯一纪录时,避免对整列添加索引。
复合索引,选择合适的最左前缀列;
不要过度索引,索引会占用额外的磁盘空间,并降低DML性能。
Innodb引擎的表记录按主键顺序保存,应该给表尽量指定主键,主键列要选择较短的数据类型,其它非主键索引会保存主键列。
10.3 Btree索引和Hash索引
Hash索引只能用于等值比较(=,<=>),不能用于范围比较(>,<,>=,<=,!=,<>,between...and,like),不能用于排序操作(order by),只能使用整个关键字来搜索一行。
Btree索引可用于等值比较和范围比较(>,<,>=,<=,!=,<>,between...and,like)。
MEMORY引擎表默认创建Hash索引,在范围比较时应创建Btree索引。
10.4 小结
索引用于快速找出特定的行,不是用索引时将顺序扫描所有的行;
如果条件列有索引,将根据条件值在索引中查找记录主键,根据主键在数据中访问特定的行;
如果需要访问表中很大一部分行(20%),顺序读取将比索引扫描更快,索引不起效。
Mysql类型分为BTREE索引、RTREE索引、Hash索引;
其中:主键索引、唯一键索引、全文索引、普通索引都是BTREE索引,空间索引是RTREE索引。
10.Mysql索引的更多相关文章
- 10 MySQL索引选择与使用
索引概述 每种存储引擎对每个表至少支持16个索引,总索引长度至少256字节. MyISAM和InnoDB的表默认创建BTREE索引.MEMORY引擎默认使用HASH索引,但也支持BTR ...
- 10 mysql选错索引
10 mysql选错索引 在mysql表中可以支持多个索引,有的sql不指定使用哪个索引,由mysql自己来决定,但是有时候mysql选错了索引,导致执行很慢. 例子 CREATE TABLE `t1 ...
- 10 | MySQL为什么有时候会选错索引? 学习记录
<MySQL实战45讲>10 | MySQL为什么有时候会选错索引? 学习记录http://naotu.baidu.com/file/e7c521276650e80fe24584bc9a6 ...
- 面试题: MySQL 索引失效的10大原因
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.建表: CREATE TABLE staffs ( id INT PRIMARY KEY AUTO_ ...
- 深入MySQL索引
MySQL索引作为数据库优化的常用手段之一在项目优化中经常会被用到, 但是如何建立高效索引,有效的使用索引以及索引优化的背后到底是什么原理?这次我们深入数据库索引,从索引的数据结构开始说起. 索引原理 ...
- MYSQL索引结构原理、性能分析与优化
[转]MYSQL索引结构原理.性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...
- MySQL索引原理及慢查询优化
原文:http://tech.meituan.com/mysql-index.html 一个慢查询引发的思考 select count(*) from task where status=2 and ...
- 【转】MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- [转]MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
随机推荐
- delphi 实现两个exe文件共享内存映像的代码
创建内存映像的程序 ------------------------------------------------------------------------------------------ ...
- css3的2D和3D的转换
一:2D转换: 通过 CSS3 transform转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. 2D移动:translate().使用translate()函数,你可以把元素从原来的位置移 ...
- 历届试题 大臣的旅费-(树的直径+dfs)
问题描述 很久以前,T王国空前繁荣.为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市. 为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首 ...
- aspectj ----- 简介
一.为什么写这个系列的博客 Aspectj一个易用的.功能强大的aop编程语言.其官网地址是:http://www.eclipse.org/aspectj/,目前最新版本为:1.7.0 RC1.但 ...
- Node KeyNote
[Node KeyNote] 1.实际上,.node文件在windows下它是一个.dll文件,在*nix下则是一个.so文件. 2.默认变量 function(exports, require, m ...
- 引用yml中自定义数据 静态引用和动态引用
//静态 @Component public class LinusFile { public static String imageUrl; @Value("${web.uploadPat ...
- 【pyspider】关于匹配html的数据
今天刚刚接触pyspider,在调试的时候注意匹配数据可以这样写: <div class="download-wp"> <a data-app-i ...
- VS2013 warning C4018 "<” 有符号/无符号不匹配
1, VS2013 warning C4018 "<” 有符号/无符号不匹配" 警告 出错代码: void show(const vector<int>& ...
- opencv: Rotate image by 90, 180 or 270 degrees
opencv2: void rotate_cw(const cv::Mat& image, cv::Mat& dest, int degrees) { ) { : dest = ima ...
- jQuery Grid高级指南
上周以为已经把jqgrid 表格这部分已经搞得差不多了,没想到在实际用的时候,出现了不少问题,重新把这块知识整理一下. 问题一:设置表格的自动刷新 问题的原因: 使用表格自带的增删改查的功能,编辑完数 ...