牌局上的心跳加速:当扑克遇上激情碰撞

核心内容摘要

遇见“辶臿辶喿辶喿17”:一场关于未来生活方式的奇遇
体育阳光少年和他的队友主人

动感扑克:一场颠覆想象的体娱新风尚

文章目录介绍一下MySQL查询语句执行过程简述一下MySQL的架构说一下你理解的数据库索引分别说说索引的优点和缺点说说MySQL中索引类型如何创建合适的索引怎么优化查询速度介绍一下MySQL查询语句执行过程执行SQL查询语句会经过上述组件和步骤简单说说连接器进行身份认证和权限验证查询缓存执行查询语句的时候会先查询缓存如果存在缓存的话直接返回。

分析器如果没有命中缓存SQL 语句就会经过分析器分析器说白了就是要先看你的 SQL 语句要干嘛再检查你的 SQL 语句语法是否正确。

优化器对你执行SQL语句按照一定规则去优化保证以MySQL认为最优的方案去执行。

执行器执行语句然后从存储引擎返回数据。

简述一下MySQL的架构逻辑架构分为三层连接层客户端包含的服务包括连接处理、身份验证、确保安全性。

核心功能层查询解析、分析、优化以及所有的内置函数解析所有跨存储引擎的功能都在这一层实现。

存储过程、触发器、视图等。

存储引擎层:负责Mysql数据的存储和提取。

服务器通过存储引擎 API和存储引擎通信屏蔽不同存储引擎差异。

不同存储引擎之间不会相互通信只会简单相应服务器的请求。

说一下你理解的数据库索引索引是一种用于快速查询和检索数据的数据结构其本质可以看成是一种排序好的数据结构。

索引本质是用空间换时间。

可以把数据库理解为一本书表数据相当于正文内容索引相当于目录。

没有索引的情况下只能从头到尾扫表(全表扫描)有索引: 可以直接定位数据位置。

针对不同查询查询场景有/无索引对比操作没有索引有索引单条查询全表扫描走索引O(log n)范围查询全表扫描顺序扫描排序临时排序利用索引排序分别说说索引的优点和缺点优点:大幅提升查询速度通过索引数据库可以大幅减少需要扫描的数据量直接定位到符合条件的记录从而显著加快数据检索速度减少I/O避免全表扫描减少读取数据减少磁盘I/O次数。

优化排序、分组操作如果查询中的 ORDER BY 或 GROUP BY 子句涉及的列建有索引数据库往往可以直接利用索引已经排好序的特性避免额外的排序操作从而提升性能。

缺点占用额外存储空间索引本质上时数据结构需要以本地文件/内存结构形式存储会额外占据空间。

增删改时需要维护索引索引过多会降低写性能。

说说MySQL中索引类型按照底层数据结构划分索引类型可分为BTREE索引MySQL 里默认和最常用的索引类型。

只有叶子节点存储 value非叶子节点只有指针和 key。

存储引擎 MyISAM 和 InnoDB 实现 BTree 索引都是使用 BTree。

哈希索引类似键值对的形式一次即可定位。

全文索引对文本的内容进行分词进行搜索。

目前只有CHAR、VARCHAR、TEXT列上可以创建全文索引。

一般不会使用效率较低。

R-TREE索引MyISAM 存储引擎支持空间数据索引(R-Tree)可以用于地理数据存储。

空间数据索引会从所有维度来索引数据可以有效地使用任意维度来进行组合查询。

按照底层存储方式角度进行划分聚簇索引索引结构和数据一起存放的索引InnoDB 中的主键索引就属于聚簇索引。

非聚簇索引索引结构和数据分开存放的索引二级索引辅助索引就属于非聚簇索引。

MySQL 的 MyISAM 引擎不管主键还是非主键使用的都是非聚簇索引。

按照应用维度划分主键索引加速查询 列值唯一不可以有 NULL 表中只有一个。

普通索引仅加速查询。

唯一索引加速查询 列值唯一可以有 NULL。

联合索引多列值组成一个索引专门用于组合搜索其效率大于索引合并。

前置索引对文本的前几个字符创建索引相比普通索引建立的数据更小因为只取前几个字符(区分度高就行)。

全文索引文本的内容进行分词进行搜索。

目前只有CHAR、VARCHAR、TEXT列上可以创建全文索引。

一般不会使用效率较低。

覆盖索引属于联合索引中一种特例一个索引包含或者说覆盖所有需要查询的字段的值。

如何创建合适的索引主要考虑点如下查询是否频率索引的本质目的是加快查询效率如果一个表需要进行高频查询适合创建索引偶尔进行查询不一定需要创建索引。

考虑表数据对于小规模数据的表大部分情况下全表扫描比创建索引会更快。

表数据大小是是否需要创建索引要考虑的一个关键因素。

字段本身是否创建索引选择作为索引的字段需要区分度高(区分度 不重复值 / 总记录数)高区分度(用户ID、订单号等)适合创建索引低区分度不适合创建索引。

字段本身需要有where、on、join等应用场景如果根本不会使用区分度高也是不需要创建索引的。

字段是否经常更新更新会导致索引频繁维护影响写性能。

经常update的字段不一定适合创建索引。

考虑联合索引如果两个/多个字段总是一起频繁进行查询可以考虑创建联合索引创建联合索引字段顺序可从下面角度进行考虑最左前缀原则高区分度在前等值条件在前范围条件在后考虑覆盖索引索引不能包含SELECT 所有查询数据时在InnoDB中二级索引定位到具体数据需要回表查询主键索引获取全部数据再返回需要的数据。

如果二级索引能包含所有需要查询的数据则不需要进行回表查询。

怎么优化查询速度减少请求的数据量只选择必须要列SELECT只选择必要的字段尽量避免使用SELECT *只返回必要的行使用LIMIT语句来限制返回的数据。

缓存重复查询数据使用缓存可以避免在数据库中进行查询特别在要查询的数据经常被重复查询时缓存带来的查询性能提升将会是非常明显的。

减少MySQL服务器扫描的行数最有效的方式使用索引来减少扫描行数。

对于不同查询场景创建合适的索引。

当表数据量比较大时针对查询场景考虑对表进行分库分表限制查询数据量。

避免使用大查询一个大查询如果一次性执行的话可能一次锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小的但重要的查询。

可考虑再应用层代码进行大查询拆分执行。

避免大连接查询将一个大连接查询分解成对每一个表进行一次单表查询然后将结果在应用程序中进行关联。

9·1免费安装官方版-9·1免费安装官方版应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123