【MySQL性能优化】几个常见的性能优化问题

本问题对应的项目链接:高频题回答模版训练

PS:性能优化问的越来越多了,需要你对原理理解,一般面试官会抛出一个问题,然后你一开始回答时,从大的方向回答就可以了,后续面试官会一点点提问细节。

1、慢查询了解吗?什么是慢查询?

2、一个 SQL 执行的很慢,可以如何排查?

3、SQL 常见优化手段有哪些?

4、什么是 SQL 注入?可以如何解决?

共以下 2 个回答

  • 終达·斯维达尼亚 永久会员 2024年3月10日 下午12:10

    1、慢查询了解吗?什么是慢查询?

    慢查询是指sql语句在进行查询操作的时候,查询的时间超过了设置的查询时间阈值。默认情况下不会开启慢查询,需要手动设置。

    3、SQL 常见优化手段有哪些?

    可以用explain加sql语句来分析sql语句执行的过程,看这条语句是否走了索引,是否走了我们所期望的索引等。或者可以使用show processlist指令查看sql运行是否被锁阻塞,如果频繁被阻塞则可以考虑使用性能更高的锁等。

    4、什么是 SQL 注入?可以如何解决?

    sql注入的意思就是sql语句接收到客户传入的字符串后,字符串中包含一些sql语句的逻辑,会导致当前sql语句的逻辑发生更改。可以采用 SQL 预编译技术,让用户输入的变量不是直接嵌入到 SQL 语句中,而是通过参数来传递这个变量。实践中通常在 mybatis 的 mapper 文件中用 “#” 作为变量的占位符,这样的话就能避免大多数的 SQL 注入。

    0 赞同 0 条回复
  • 秊 永久会员 2023年8月14日 下午10:13

    1、慢查询了解吗?什么是慢查询?

    慢查询是 MySQL 提供的一种日志记录,专门用来记录 MySQL 中查询时间超过阈值的 SQL。默认情况下 MySQL 不会开启慢查询日志,需要手动设置 slow_query_log 参数来开启。除此之外,还有 long_query_time 参数,用来设置慢查询时间的阈值,默认为 10s。

    2、一个 SQL 执行的很慢,可以如何排查?

    见 「【索引专题】索引优化相关」。

    3、SQL 常见优化手段有哪些?

    首先是尽量不使用子查询,在 MySQL 5.6 以前对于带有自查询的 SQL 都是先查外表后匹配内表,当外表数据很大时,整个 SQL 会非常慢。在 5.6 以后虽然使用了 join 来优化这种情况,但只限于 select 语句, update/delete 语句仍然效率很低;还有用 in 来代替多个 or。因为 MySQL 对 in 做了优化,会将 in 中的常量都存储在一个排过序的数组里,效率要高;还有在查询时,尽量只返回必要的列,不要查整张表,避免走全表查询;在索引方面,查询时尽量使用覆盖索引。不能在需要用索引的 SQL 使用函数,这样会使索引失效;还可以用 explain 观察其中的 type 字段,至少要达到 range 级别,一般来说是 ref,最好是 consts,其中 range 是对索引进行范围搜索,ref 会使用普通索引,consts 代表通过主键或唯一索引列来定位记录,效率最高。

    4、什么是 SQL 注入?可以如何解决?

    SQL 注入就是通过把 SQL 命令插入到 Web 提交表单,或者页面请求的查询字符串中,服务器拿到这个字符串后,会把这个字符串作为 SQL 的执行参数去数据库查询。由于这个参数是恶意的,服务器执行这条 SQL 后就会出现问题,常见的比如登录页面中输入特定代码,就能实现免账号登录。

    解决的话可以用参数绑定,采用 SQL 预编译技术,让用户输入的变量不是直接嵌入到 SQL 语句中,而是通过参数来传递这个变量。实践中通常在 mybatis 的 mapper 文件中用 “#” 作为变量的占位符,这样的话就能避免大多数的 SQL 注入。

    除此之外,还可以使用正则表达式过滤传入的参数,例如把 “–” 过滤掉等等。

    0 赞同 0 条回复

# 回答此问题

后才能回答