阿里网站年费怎么做分录,网站建设相关问题,旅游网站开发公司,温岭市溪建设局网站目录 一.优化
1.MYSQL中#xff0c;如何定位慢查询#xff1f;
2.SQL语句执行慢#xff0c;如何分析呢#xff1f;
3.索引
了解过索引吗#xff1f;#xff08;什么是索引#xff09;
索引的底层数据结构了解过吗#xff1f;
B树和B树的区别是什么呢?
什么是聚…目录 一.优化
1.MYSQL中如何定位慢查询
2.SQL语句执行慢如何分析呢
3.索引
了解过索引吗什么是索引
索引的底层数据结构了解过吗
B树和B树的区别是什么呢?
什么是聚簇索引什么是非聚簇索引/什么是聚集索引什么是二级索引非聚集索引什么是回表
知道什么叫覆盖索引吗
MYSQL超大分页怎么处理
索引创建原则有哪些
什么情况下索引会失效 一.优化
1.MYSQL中如何定位慢查询 聚合查询 多表查询 表数据量过大查询 深度分页查询
表象页面加载过慢、接口压测响应时间过长超过1s
方案一开源工具 调试工具Arthas 运维工具Prometheus、Skywalking查看接口的执行情况、时间
方案二MySQL自带慢日志
慢查询日志记录了所有执行超过指定参数(long_querey_time单位秒默认10秒)的所有SQL语句日志。 若要开启慢查询日志需要在MySQL的配置文件/etc/my.cnf中配置如下信息
#开启慢查询日志查询开关
slow_query_log1
#设置慢日志的时间为2秒SQL语句超过两秒就会记录慢日志
long_query_time2
配置完成后重启mysql服务器测试可以通过查询Localhost-slow.log文件查看语句执行信息。
回答
曾经在测试接口的时候发现非常慢压测的结果大概在5秒左右
我们系统中当时采用了运维工具(skywalking)可以检测出哪个接口最终因为是sql的问题
在Mysql中开启了慢日志查询我们设置的时间是2秒一旦sql超过2秒就会记录到日志中(调试阶段)。
2.SQL语句执行慢如何分析呢
根据上面的几种查询方式可以使用MySQL自带的分析工具DESC或EXPLAIN来分析。 通过key和key_len即sql实际命中的索引以及索引占用的大小检查是否命中了索引即索引本身是否失效 通过type字段查看sql是否有进一步的优化空间是否存在全索引扫描或全盘扫描(即index和all) 通过extra建议判断是否出现了回表情况using index condition如果出现了可以尝试添加索引或修改返回字段来回复。
3.索引
了解过索引吗什么是索引 索引是帮助MySQL高效获取数据的有序数据结构 索引能提高数据检索的效率降低数据库的IO成本不需要全表扫描 通过索引对数据进行排序降低数据排序的成本降低了CPU的消耗
索引的底层数据结构了解过吗
MySQL的搜索引擎也就是InnoDB引擎默认采取的是B树的结构存储索引 一方面它的阶数更多路径更短B树是5阶每个节点最多存储4个Key 另一方面B树的磁盘读写代价更低非叶子节点只存储指针叶子节点存储数据 最后一点B树便于扫库和区间查询叶子节点是一个双向链表
B树和B树的区别是什么呢? 第一在B树中非叶子节点和叶子节点都会存放数据而B树的所有的数据都会出现在叶子节点在查询的时候B树查找效率更加稳定 第二在进行范围查询的时候B树效率更高因为B树都在叶子节点存储并且叶子节点是一个双向链表
什么是聚簇索引什么是非聚簇索引/什么是聚集索引什么是二级索引非聚集索引什么是回表 聚簇索引数据与索引放到一块B树里的叶子节点里保存整行的数据有且只有一个一般都是表的主键 二级索引是数据与索引分开存储B树的叶子节点里保存对应的主键可以有多个
回表是指通过二级索引找到对应的主键再根据主键通过聚集索引找到整行数据。
知道什么叫覆盖索引吗
覆盖索引是指返回的列被查询的索引全部包含。 比如典型的根据主键id查询就是覆盖索引叶子节点包含了整行数据 同时我们应该避免返回的列需要创建索引因为这样可能会触发回表降低效率所以应当避免使用select *
MYSQL超大分页怎么处理
MySQL超大分页一般出现在使用limit语句对大量数据进行处理和排序越到后面查询效率越低。
我们可以通过覆盖索引子查询来提高查询效率。
具体的做法是先根据id查询作为子查询的结果再和原表根据id联查因为id查询是覆盖索引所以效率会快很多。
原语句select * from user limit 9000000,10;
优化selct * form user u,(select id from user order by id limit 9000000,10) t where u.idt.id
索引创建原则有哪些 当数据量比较大查询比较频繁的表适合建立索引超过10万 经常作为查询条件、排序、分组的字段 字段内容区分度高 内容长使用前缀索引 尽量使用联合索引 控制索引的数量 如果索引列不能存储NULL值请在创建表时使用NOT NULL约束
嗯这个情况有很多不过都有一个大前提就是表中的数据要超过10万以上我们才会创建索引并且添加索引的字段是查询比较频繁的字段一般也是像作为查询条件排序字段或分组的字段这些。 还有就是我们通常创建索引的时候都是使用复合索引来创建一条sgl的返回值尽量使用覆盖索引如果字段的区分度不高的话我们也会把它放在组合索引后面的字段。如果某一个字段的内容较长我们会考虑使用前缀索引来使用当然并不是所有的字段都要添加索引这个索引的数量也要控制因为添加索引也会导致新增改的速度变慢。
什么情况下索引会失效
索引失效的情况有很多可以说一些自己遇到过的不要张口就得得得说一堆背诵好的面试题适当的思考一下回想一下更真实)
当使用联合索引的时候 违反最左前缀法则 或者使用%开头进行模糊查询 或者字符串没加单引号此时发生了类型转换 或者对索引列进行运算操作比如substring 或者在范围查询右侧的列
嗯这个情况比较多我说一些自己的经验以前遇到过的
比如索引在使用的时候没有遵循最左匹配法则第二个是模糊查询如果%号在前面也会导致索引失效。如果在添加索引的字段上进行了运算操作或者类型转换也都会导致索引失效。
我们之前还遇到过一个就是如果使用了复合索引中间使用了范围查询右边的条件索引也会失效所以通常情况下想要判断出这条sql是否有索引失效的情况可以使用explain执行计划来分析