MySQL的索引
MySQL索引
索引:是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。其可以加快数据读操作,但会使数据写操作变慢;应该构建在被用作查询条件的字段上。
MySQL中的索引类型:
1.B+TREE索引
Balance Tree(平衡树),是一种数据结构,由于其综合效率较高,显著减少定位记录时所经历的中间过程,从而加快存取速度。
可用来查询的类型:
(1)全值匹配
(2)匹配最左前缀
(3)匹配列前缀
(4)匹配范围值
但也有一些限制:
(1)必须从最左侧开始查询
(2)不能跳过某一索引
(3)如果查询中某个列为范围查询,那么其右侧的列都无法再使用索引优化查询;(精确范围放左侧,范围查询放右侧即可;反之,右侧将无法再使用索引查询。)
2.Hash索引
基于哈希表,适合精确匹配索引中的所有列;但只有Memory存储引擎支持显式hash索引;不支持模糊匹配,不适用于顺序查询;
3.空间索引(R-TREE):
在MySQL中仅MyISAM存储引擎支持空间索引;
4.全文索引(FULLTEXT):
在文本中查找关键词,类似于搜索引擎;
MySQL中索引的管理:
/*创建索引*/
CREATE INDEX index_name ON tbl_name(col1,col2,...); /*删除索引*/
DROP [ONLINE|OFFLINE] INDEX index_name ON tbl_name; /*查看索引*/
SHOW {INDEX|INDEXES|KEYS} {FORM|IN} tbl_name [{FROM|IN} db_name] [WHERE expression];
如何分析索引有效性?
EXPLAIN SELECT Clause...
其输出结果为:
各项指标的解释如下:
id:当前查询中SELECT语句的编号
select_type:查询类型
/*相关的类型*/ SIMPLE //简单查询
SUBQUERY //简单子查询
DERIVED //用于FROM的子查询;
UNION //UNION语句中UNION后的第一个SELECT语句
UNION RESULT //UNION之后的总体临时虚表
table:查询关联到的表
type:关联类型,即MySQL查询表的方式
/*相关的类型*/ ALL //全表扫描
index //根据索引的次序进行全表扫描;如果在Extra中出现了“USING index”则表示使用了覆盖索引,而非全表扫描
range //有限制的根据索引实现的范围扫描
ref //根据索引返回表中匹配某单个值的所有行
eq_ref //仅返回一行,但需要额外与某个参考值作比较
const,system //直接返回单个行;此类型为最佳查询;
possible_keys:查询中可能会用到的索引
key:查询中使用的索引
key_len:使用索引的字节数
ref:在利用key所表示的索引完成查询时所有的列或某常量值
row:MySQL找到目标所读取的行数
Extra:额外信息
/*额外信息*/ Using index //MySQL将会使用覆盖索引,以避免访问表;
Using where //MySQL服务器将在存储引擎检索后,再进行一次过滤;
Using temporary //MySQL对结果排序时会使用临时表;
Using filesort //对结果使用一个外部索引排序(性能低下);
MySQL的索引的更多相关文章
- 【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
本文地址 分享提纲: 1.为查询缓存优化你的查询 2. EXPLAIN 你的 SELECT 查询 3. 当只要一行数据时使用 LIMIT 1 4. 为搜索字段建索引 5. 在Join表的时候使用相当类 ...
- MySQL中索引和优化的用法总结
1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是Mysql的 ...
- MySQL 联合索引详解
MySQL 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c ...
- Mysql复合索引
当Mysql使用索引字段作为条件时,如果该索引是复合索引,必须使用该索引中的第一个字段作为条件才能保证系统使用该索引,否则该索引不会被使用,并且应尽可能地让索引顺序和字段顺序一致
- 如何正确建立MYSQL数据库索引
索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...
- mysql高性能索引策略
转载说明:http://www.nyankosama.com/2014/12/19/high-performance-index/ 1. 引言 随着互联网时代地到来,各种各样的基于互联网的应用和服务进 ...
- MySQL创建索引语法
1.介绍: 所有mysql索引列类型都可以被索引,对来相关类使用索引可以提高select查询性能,根据mysql索引数,可以是最大索引与最小索引,每种存储引擎对每个表的至少支持16的索引.总索引长度为 ...
- mysql使用索引优化查询效率
索引的概念 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度.在没 ...
- Mysql中索引的 创建,查看,删除,修改
创建索引 MySQL创建索引的语法如下: ? 1 2 3 CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ON ...
- mysql 联合索引(转)
http://blog.csdn.net/lmh12506/article/details/8879916 mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中 ...
随机推荐
- [转载]Python兵器谱
转载自:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然 ...
- ASIHttpRequest或者SDWebImage给UIImageView加载图片的逻辑是什么样子的
非常非常喜欢SDWebImage,就算后来AF也做了图片缓存,我也还是一直使用.图片缓存真的是一件令人头疼的事,但是SDWebImage封装了一切,你所需要的只是简单的set一个URL:1.设置一个展 ...
- hdu 4424 & zoj 3659 Conquer a New Region (并查集 + 贪心)
Conquer a New Region Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- winform combobox控件绑定 分类: WinForm 2014-04-17 14:34 118人阅读 评论(0) 收藏
想要达到的效果:把数据库中的一列数据绑定到combobox控件中. 数据库表:T_Task//任务表 列名:Task_Name//名称 主键:Task_ID combobox控件名称:cbName 解 ...
- c# mongo 返回指定的列
var query= db.GetCollection<Merchant>("merchant").Find(Query<Merchant>.EQ(m =& ...
- Swift-Lesson2(下)
- Android Matrix详解
Matrix的数学原理 平移变换 旋转变换 缩放变换 错切变换 对称变换 代码验证 Matrix的数学原理 在Android中,如果你用Matrix进行过图像处理,那么一定知道Matrix这个类.An ...
- 边走边学Nodejs (基础入门篇)
1.什么是Node.js Nodejs ,或者node, 是一个基于ChromeJavaScript执行时建立的平台.用于方便地搭建响应速度快.易于扩展的网络应用.Node.js 使用事件驱动, 非堵 ...
- TCP/IP源码(59)——TCP中的三个接收队列
http://blog.chinaunix.net/uid-23629988-id-3482647.html TCP/IP源码(59)——TCP中的三个接收队列 作者:gfree.wind@gmai ...
- YYCache 源码分析(一)
iOS 开发中总会用到各种缓存,YYCache或许是你最好的选择.性能上有优势,用法也很简单.作者ibireme曾经对比过同类轮子:http://blog.ibireme.com/2015/10/26 ...