MySQL高级-索引是什么
目录
什么是索引
索引优势:
索引劣势:
索引分类:
mysql索引结构:
哪些情况需要创建索引:
哪些情况不要创建索引:
索引操作:
什么是索引
MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构——可以得到索引的本质:索引是一种数据结构。
一般来说索引本身也很大不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。
我们平常说的索引,如果没有特别指明,都是B树(多路搜索树,并不一定是二叉的)结构组织的索引。其中聚集索引,次要索引,覆盖索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引。当然,除了B+树这种类型的索引之外,还有哈希索引(hash index)等。
索引优势:
增加查询、排序速率。
索引劣势:
实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的。
虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。
索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询。
索引分类:
单值索引:即一个索引只包含单个列,一个表可以有多个单列索引。
唯一索引:索引列的值必须唯一,但允许有空值。
复合索引:即一个索引包含多个列。
基本语法:在varchar字段上建立索引时,必须要指定索引长度,没有必要要对全字段建立索引。
mysql索引结构:
BTree索引、Hash索引、full-text全文索引、R-Tree索引。
哪些情况需要创建索引:
1.主键自动建立唯一索引。
2.频繁作为查询条件的字段应该创建索引。
3.查询中与其他表关联的字段,外键关系建立索引。
4.频繁更新的字段不适合创建索引(因为每次更新不单单是更新了记录还会更新索引)
5.where条件里用不到的字段不创建索引。
6.单键/组合索引的选择问题,who?(在高并发下倾向创建组合索引)
7.查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度。
8.查询中统计或者分组字段。
哪些情况不要创建索引:
1.表记录太少。
2.经常增删改的表。(提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件)
3.数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。
假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值得分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。
索引的选择性是指索引列中不同值的数目与表中记录数的比。如果一个表中有2000条记录,表索引列有1980个不同的值,那么这个索引的选择性就是1980/2000=0/99。一个索引的选择性越接近于1,这个索引的效率就越高。
索引操作:
查看索引:
SHOW INDEX FROM tb_stu_info2;
SHOW INDEX FROM tb_stu_info2\G
删除索引:
DROP INDEX 索引名 ON 表名;
ALTER TABLE 表名 DROP INDEX 索引名;
创建索引:
ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY [索引名] (字段名1 [(长度)] [ASC | DESC]) [USING 索引方法];
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名 ON 表名(字段名) [USING 索引方法];
说明:
UNIQUE:可选。表示索引为唯一性索引。
FULLTEXT:可选。表示索引为全文索引。
SPATIAL:可选。表示索引为空间索引。
INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是一样的。
索引名:可选。给创建的索引取一个新名称。
字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。
长度:可选。指索引的长度,必须是字符串类型才可以使用。
ASC:可选。表示升序排列。
DESC:可选。表示降序排列
MySQL高级-索引是什么相关推荐
- MySQL高级-索引
索引 1.索引概述 2.索引优势劣势 3.索引结构 3.1 BTREE 结构 3.2 B+ TREE 结构 3.3 MySQL中的B+ 树 4 索引分类 5 索引语法 5.1 创建索引 5.2 查看索 ...
- MySQL高级-索引优化(超详细)
性能分析 MySQL Query Optimizer Mysql中由专门负责优化SELECT语句的优化器,主要功能就是通过计算分析系统中收集到的统计信息,为客户端请求的Query提供他认为最优的执行计 ...
- MySQL 高级 - 索引 - 索引设计原则
索引设计原则 索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑符合这些原则,便于提升索引的使用效率,更高效的使用索引. 对查询频次较高,且数据量比较大的表建立索引. 索引字段的选择,最佳 ...
- MySQL 高级 —— 索引实现的思考
引言 最近看了一个公开课,是有关MySQL对索引设计的思考.详细讲解了几种索引实现的设计思考与利弊辨析,讨论了为什么MySQL默认情况下会使用B树索引,B+树索引又对B树做了哪些结构改进. 本片博客通 ...
- MySQL 高级 - 索引 - 概述
索引概述 MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序).在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数 ...
- Mysql高级——索引篇
索引 1. 索引的概念 索引(index)是帮助 MySQL 高效获取数据的数据结构(有序).在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就 ...
- Mysql高级 索引优化
Mysql逻辑架构 Mysql与其他数据库相比有点与众不同,他的架构可以在多种不同的场景中应用并发挥作用,主要体现在存储引擎的架构上,插件式的存储引擎结构将查询处理和其他的系统任务以及数据的存储提取分 ...
- MySQL高级-索引是个什么东西?explain到底怎么用-MySQL查询优化大全
目录 一.引出问题-MySQL的查询优化: 二.性能下降的原因: 三.索引到底是什么?怎么用? 1.索引操作 查看索引: 删除索引: 创建索引: 说明: 索引命名规范: 2.索引优势: 3.索引劣势: ...
- MySQL 高级 - 索引 - 数据结构
索引结构 索引是在MySQL的存储引擎层中实现的,而不是在服务器层实现的.所以每种存储引擎的索引都不一定完全相同,也不是所有的存储引擎都支持所有的索引类型的.MySQL目前提供了以下4种索引: BTR ...
最新文章
- HTML中div标签的一个简单的使用和介绍
- 知识驱动的推荐系统:现状与展望
- ElasticSearch安装入门
- windoes硬盘备份(数据迁移)的方法
- 凉凉用计算机打的歌谱,张碧晨杨宗纬《凉凉》歌谱
- arduino电源接口直径多大_求助:Arduino UNO(如下图)有三种供电方式:USB供电,5v(供应芯片,下面一排接口中“...
- 对“粘连”footer布局的思考和总结
- Flask--读取配置参数的方式
- oracle里子连接查询,pc端页面滚动到底部加载更多数据......
- Java怎么不启动_dubbo不启动了怎么回事???一模一样的另一个没问题
- python以写模式打开录入_Python基础06
- 中文ocr-Benchmarking Chinese Text Recognition: Datasets, Baselines, andan Empirical Study
- 基于微信小程序的比赛报名系统
- 2016计算机考研408答案,2016年计算机408统考考研真题及答案解析.pdf
- 非华为电脑安装华为电脑管家,实现与手机平板的多屏协同
- linux虚拟机界面菜单栏和任务栏不见了,已解决
- SAP中成本估算取价与价格协议的状态关联测试
- 【DNN】PNN(Product-based Neural Networks )
- 个人用计算机配置清单,电脑配置单这么写?教你写一份合理的电脑配置清单
- GPS失锁和丢包区别
热门文章
- 如何将本地项目上传至git中进行管理的解决办法
- 「后端小伙伴来学前端了」CSS 做三角边框,必会的基础操作之一
- 湖南计算机应用专业较好的学校,好的计算机应用专业排名
- matlab中的imsod,Matlab eval用法
- 使用之location和rewrite用法
- java calendar字符串显示_Java获取当前时间年月日、时间格式化打印、字符串转日期...
- mysql中rpl_MySQL管理工具MySQL Utilities — mysqlrplcheck(44)
- sqlite常见使用总结
- python在办公上的应用_Python 应用 办公自动化之 Excel(上)
- flavor android build,android BuildType和BuildFlavor