深圳那个网站建设,手机网站建设定制,网站建设worldpress,免费ppt成品网站MySQL性能优化 在MySQL中#xff0c;如何定位慢查询 慢查询表象#xff1a;页面加载过慢、接口压测响应时间过长#xff08;超过1s#xff09;。造成慢查询的原因通常有#xff1a;聚合查询、多表查询、表数据量过大查询、深度分页查询
方案一#xff1a;开源工具 调试工…MySQL性能优化 在MySQL中如何定位慢查询 慢查询表象页面加载过慢、接口压测响应时间过长超过1s。造成慢查询的原因通常有聚合查询、多表查询、表数据量过大查询、深度分页查询
方案一开源工具 调试工具Arthas 运维工具Prometheus 、Skywalking。工具报表展示中可以看到哪个接口慢并且能分析出接口中哪部分耗时较多包括具体的SQL执行时间这样就能定位到出现问题的SQL。
方案二MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数long_query_time单位秒默认10秒的所有SQL语句的日志 如果要开启慢查询日志需要在MySQL的配置文件/etc/my.cnf中配置如下信息
# 开启MySQL慢日志查询开关slow_query_log1
# 设置慢日志的时间为2秒SQL语句执行时间超过2秒就会视为慢查询记录慢查询日志long_query_time2配置完毕之后通过以下指令重新启动MySQL服务器进行测试查看慢日志文件中记录的信息 /var/lib/mysql/localhost-slow.log。 SQL语句执行很慢如何优化
可以采用EXPLAIN 或者 DESC命令获取 MySQL 如何执行 SELECT 语句的信息 语法 - 直接在select语句之前加上关键字 explain / desc EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件 ; possible_key 当前sql可能会使用到的索引key 当前sql实际命中的索引key_len 索引占用的大小 Extra 额外的优化建议
通过key和key_len两个查看是否可能会命中索引。 type 这条sql的连接的类型性能由好到差为NULL、system、const、eq_ref、ref、range、 index、all
system查询系统中的表const根据主键查询eq_ref主键索引查询或唯一索引查询ref索引查询range范围查询index索引树扫描all全盘扫描
总结使用MySQL的EXPLAIN命令来分析这条SQL的执行情况。通过key和key_len可以检查是否命中了索引如果已经添加了索引也可以判断索引是否有效。通过type字段可以查看SQL是否有优化空间比如是否存在全索引扫描或全表扫描。通过extra建议可以判断是否出现回表情况如果出现可以尝试添加索引或修改返回字段来优化。
MYSQL支持的存储引擎有哪些, 有什么区别
在mysql中提供了很多的存储引擎比较常见有InnoDB、MyISAM、Memory
InnoDB存储引擎是mysql5.5之后是默认的引擎它支持事务、外键、表级锁和行级锁MyISAM是早期的引擎它不支持事务、只有表级锁、也没有外键用的不多Memory主要把数据存储在内存支持表级锁没有外键和事务用的也不多
什么是索引 索引index是帮助MySQL高效获取数据的数据结构(有序)。在数据之外数据库系统还维护着满足特定查找算法的数据结构B树这些数据结构以某种方式引用指向数据 这样就可以在这些数据结构上实现高级查找算法这种数据结构就是索引。
索引的底层数据结构 MySQL的默认存储引擎InnoDB使用的是B树作为索引的存储结构。选择B树的原因包括节点可以有更多子节点路径更短磁盘读写代价更低非叶子节点只存储键值和指针叶子节点存储数据B树适合范围查询和扫描因为叶子节点形成了一个双向链表。
聚簇索和非聚簇索引 聚簇索引是指数据与索引放在一起B树的叶子节点保存了整行数据通常只有一个聚簇索引一般是由主键构成。 非聚簇索引则是数据与索引分开存储B树的叶子节点保存的是主键值可以有多个非聚簇索引通常我们自定义的索引都是非聚簇索引。
聚集索引选取规则:
如果存在主键主键索引就是聚集索引。如果不存在主键将使用第一个唯一UNIQUE索引作为聚集索引。如果表没有主键或没有合适的唯一索引则InnoDB会自动生成一个rowid作为隐藏的聚集索引。 回表查询
通过二级索引找到对应的主键值到聚集索引中查找整行数据这个过程就是回表
覆盖索引
覆盖索引是指查询使用了索引并且需要返回的列在该索引中已经全部能够找到 。 MYSQL超大分页怎么处理 超大分页通常发生在数据量大的情况下使用LIMIT分页查询且需要排序时效率较低。可以通过覆盖索引和子查询来解决。首先查询数据的ID字段进行分页然后根据ID列表用子查询来过滤只查询这些ID的数据因为查询ID时使用的是覆盖索引所以效率可以提升。
索引创建原则有哪些
1). 针对于数据量较大且查询比较频繁的表建立索引。
2). 针对于常作为查询条件where、排序order by、分组group by操作的字段建立索引。
3). 尽量选择区分度高的列作为索引尽量建立唯一索引区分度越高使用索引的效率越高。
4). 如果是字符串类型的字段字段的长度较长可以针对于字段的特点建立前缀索引。
5). 尽量使用联合索引减少单列索引查询时联合索引很多时候可以覆盖索引节省存储空间避免回表提高查询效率。
6). 要控制索引的数量索引并不是多多益善索引越多维护索引结构的代价也就越大会影响增删改的效率。
7). 如果索引列不能存储NULL值请在创建表时使用NOT NULL约束它。当优化器知道每列是否包含NULL值时它可以更好地确定哪个索引最有效地用于查询。
索引失效
1). 违反最左前缀法则 如果索引了多列要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。匹配最左前缀法则走索引 2). 范围查询右边的列不能使用索引 根据前面的两个字段 name status 查询是走索引的 但是最后一个条件address 没有用到索引。
3). 不要在索引列上进行运算操作 索引将失效。
4). 字符串不加单引号造成索引失效。 由于在查询是没有对字符串加单引号 MySQL的查询优化器会自动的进行类型转换造成索引失效。
5).以%开头的Like模糊查询索引失效。如果仅仅是尾部模糊匹配索引不会失效。如果是头部模糊匹配索引失效。 MySQl八股Docs