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索引的更多相关文章

  1. 10 MySQL索引选择与使用

    索引概述     每种存储引擎对每个表至少支持16个索引,总索引长度至少256字节.     MyISAM和InnoDB的表默认创建BTREE索引.MEMORY引擎默认使用HASH索引,但也支持BTR ...

  2. 10 mysql选错索引

    10 mysql选错索引 在mysql表中可以支持多个索引,有的sql不指定使用哪个索引,由mysql自己来决定,但是有时候mysql选错了索引,导致执行很慢. 例子 CREATE TABLE `t1 ...

  3. 10 | MySQL为什么有时候会选错索引? 学习记录

    <MySQL实战45讲>10 | MySQL为什么有时候会选错索引? 学习记录http://naotu.baidu.com/file/e7c521276650e80fe24584bc9a6 ...

  4. 面试题: MySQL 索引失效的10大原因

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.建表: CREATE TABLE staffs ( id INT PRIMARY KEY AUTO_ ...

  5. 深入MySQL索引

    MySQL索引作为数据库优化的常用手段之一在项目优化中经常会被用到, 但是如何建立高效索引,有效的使用索引以及索引优化的背后到底是什么原理?这次我们深入数据库索引,从索引的数据结构开始说起. 索引原理 ...

  6. MYSQL索引结构原理、性能分析与优化

    [转]MYSQL索引结构原理.性能分析与优化 第一部分:基础知识 索引 官方介绍索引是帮助MySQL高效获取数据的数据结构.笔者理解索引相当于一本书的目录,通过目录就知道要的资料在哪里, 不用一页一页 ...

  7. MySQL索引原理及慢查询优化

    原文:http://tech.meituan.com/mysql-index.html 一个慢查询引发的思考 select count(*) from task where status=2 and ...

  8. 【转】MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  9. [转]MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

随机推荐

  1. kubernetes ui 搭建

    1.部署Kubernetes云计算平台,至少准备两台服务器,此处为3台 Kubernetes Master节点:192.168.0.111 Kubernetes Node1节点:192.168.0.1 ...

  2. MongoDB模糊查询,以及MongoDB模糊查询时带有括号的情况

    模糊查询 记录如下: { "_id" : ObjectId("5c3d486d24aa9a000526367b"), "name" : &q ...

  3. SQL左外连接

    第一篇写在网络上的笔记 左外连接 select a.*,b.* from a left join b on a与b的连接条件; 先展示left join关键字左边的a表中的所有数据,根据条件关联查询l ...

  4. nbtscan工具

    这是一款用于扫描Windows网络上NetBIOS名字信息的程序.该程序对给出范围内的每一个地址发送NetBIOS状态查询,并且以易读的表格列出接收到的信息,对于每个响应的主机,NBTScan列出它的 ...

  5. TF-IDF原理及使用

    1.TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率).(逆文档词频) 2.自我理解: 公式TF = $$\frac{语料库中关键词 ...

  6. 11.14java课堂测试

    源代码: import java.*; import java.util.*; import java.io.File; import java.io.FileInputStream; import ...

  7. :after伪类+content经典应用举例

    :after伪类+content 清除浮动的影响 .box{padding:10px; background:gray;} .l{float:left;} <div class="bo ...

  8. 设置https以及http转https的问题

    公司用的是阿里云服务器win2008server r2 ,环境是phpwamp,出现许多问题.2018-11-12 一 设置https 1.设置httpd.ini 取消以下三个配置的# LoadMod ...

  9. 有关ngui grid中去除一项后的排序问题

    遇到这个问题,是在实现一个公告栏界面的时候,公告栏可以新增一条公告,也可以删除一条公告. 新增很简单,这里不做多的介绍: 关于删除,之前的代码是: GameObject go = is_parent. ...

  10. Cisco无线AP上联口为trunk时无法注册故障处理

    网络环境:WLC5520  AP:1832i-h-k9 客户实施过程中电话告知其将AP和交换机互联的端口类型设置为TRUNK口后,AP无法注册到WLC上,后经过查看配置发现客户用于AP管理的VLAN为 ...