MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构。
1、唯一索引
指索引列的值必须唯一,但允许有空值(NULL可以出现多次)。
2、单值索引
3、复合索引
即一个索引包含多个列。
创建索引:
删除索引:
数组?:
数组在查找方面效率很高,根据角标查询数据,时间复杂度为O(1),但如果发生了插入和删除,整个数组的角标都会变化,时间复杂度为O(n),效率很低。
哈希表?:
哈希表是由键值对组成的,其增删改查的时间复杂度都是O(1)。
二叉树?:
就增删改查操作来说,哈希比树的操作更快,但二叉树有排序操作。
但是,普通二叉树是静态的,导致其并不稳定,各个节点添加后就无法修改优化,也就是说,可能会有下面的情况出现:
平衡二叉树(AVL)?:
相比于普通二叉树,平衡二叉树会通过自旋来实现动态变化,是自身的结构稳定了下来。
到了平衡二叉树这里,各个操作的时间复杂度都已经相对稳定,且时间复杂度均为O(log(n))。
B树?:
二叉树中,每个节点仅能有一个数据,B树中可以有两个(三叉树)。
相比于二叉树,少了一次IO操作,提高了查询效率。
B+树(√):
这是B树的检索原理:
在B树中,每个磁盘块中键值和数据存储在一起。
优势:① 提高数据检索的效率,降低数据库的IO成本。
劣势:① 索引提升了查询速度,但也降低了更新表的速度,如INSERT、UPDATE、DELETE。因为更新表时,不仅要保存数据,还要保存索引文件中每次更新添加了索引列的字段,调整因为更新所带来的键值变化后的索引信息。
MySQL的查询处理,也就是使用EXPLAIN关键字模拟优化器执行SQL查询语句,从而得知MySQL是如何处理你的SQL语句的,由此来分析你的查询语句或是表结构的性能瓶颈。
执行EXPLAIN所获得的信息:
注:由于Mysql5.5/5.7/8.0底层做了不同优化,不同版本下性能表现不同。
最简单的select查询,查询中不包含子查询或UNION
查询中若包含复杂的子部分,则最外层被标记为PRIMARY,在select或where中的子部分为SUBQUERY
从UNION表获取结果的select就是UNION RESULT
还有DEPENDENT SUBQUERY和UNCACHEABLE SUBQUERY,但不常用。
显示查询使用了何种类型,从好到差依次是:
system > const > eq_ref > ref > range > index > ALL
注:一般来说,需要保证查询至少要达到range级别,最好能达到ref
表示可能应用在这张表中的索引,可能是一个或多个,只要查询涉及到的字段存在索引,该索引就会被列出,但不一定被实际使用。
1、Using where
2、Using filesort()
说明MySQL会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取,MySQL中无法利用索引完成的排序称为“文件排序”。
创建索引后:
建立了的deptid和name的索引后,该排序就会使用索引,大幅提升效率。
相比于上面的order by操作,group by操作要在where查询后对其进行分组操作再产生一张新表作为结果,也就是说,where查询的数据被形成了一张中间的临时表用于下面的操作,既然如此,就会发生Using temporary。
如果没有出现using where,则表示索引是用来读取数据而非执行查找动作。
到此这篇mysql查看主键索引(mysql主键索引支持哪些数据类型)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sjkxydsj/21968.html