MySQL优化(7):其他注意事项「建议收藏」

MySQL优化(7):其他注意事项「建议收藏」DDL执行 线上服务器执行DDL,更新表结构,需要谨慎,结构更改会导致全表被独占锁定(新版本有改善) 避免这种情况,使用COPY策略,而不是直接执行ALTER TABLE语句 思路:创建一个新表,满足

MySQL优化(7):其他注意事项

DDL执行

线上服务器执行DDL,更新表结构,需要谨慎,结构更改会导致全表被独占锁定(新版本有改善)

避免这种情况,使用COPY策略,而不是直接执行ALTER TABLE语句

思路:创建一个新表,满足新要求,将旧表数据逐条导入新表,同时表上可以执行其他任务,导入的过程其他任务都记录在日志,导入完成后根据日志更新新表,最后新表替换旧表(Java等代码中实现)

 

数据导入语句

在恢复数据时,需要大量的数据导入

思路:导入时,先禁用索引和约束;导入完毕后,再开启索引和约束,一次性创建索引

有可能使用到的语句:禁用索引和开启索引

ALTER TABLE [table-name] DISABLE KEYS;
ALTER TABLE [table-name] ENABLE KEYS;

代码100分

对于InnoDB存储引擎,可以将多条SQL放入一个事务中完成 

可以使用prepare预编译的方案执行导入操作,减少相同结构的SQL编译次数

 

大容量页码LIMIT

尽量不要使用大的OFFSET,比如LIMIT 10000,10

思路:尽量使用条件过滤,完成数据筛选,而不是通过OFFSET跳过已经查询到的数据

 

SELECT *

不要使用SELECT *,而是使用具体的字段;这一点对性能影响不是很大,不过这是规范

 

ORDER BY RAND()不要用

这句话是随机排序,如果业务要随机选择尽量在服务器代码中实现,随机生成主键进行检索

 

单表和多表查询

尽量使用单表查询来代替多表查询,原因有以下几点:

(1)单表计算的压力在java代码,多表计算的压力在数据库

(2)多表查询会一个一个表依次执行,最后再合并结果

(3)多表查询会增加锁定时间,降低程序并发性能

 

COUNT(*)

MYISAM会自动存储COUNT(*)的值,INNODB没有内部计数器,执行这句话相对来说较慢

解决思路:额外创建一张表,把COUNT(*)的值记录下来

另外:

COUNT(ID)表示的是:统计ID字段不为NULL的数量

COUNT(1)表示的是:统计记录数量,和COUNT(*)几乎一样

 

LIMIT 1

如果你确定查到的结果只有一个,那么加入LIMIT 1会提高性能

 

慢查询日志

用于记录执行时间超过某个临界值的SQL的日志,用户快速定位慢查询

开启该日志:

查询是否开启

代码100分SHOW VARIABLES LIKE "slow_query_log";

开启

SET GLOBAL slow_query_log=On;

开启后会在数据目录创建slow.log文件

查看临界时间,默认是十秒,很长

代码100分SHOW VARIABLES LIKE "long_query_time";

设置临界时间

SET long_query_time = 0.5;

一旦超过了0.5秒,就会被自动记录

 

PROFILE信息统计

详细记录SQL语句执行时间的工具

开启PROFILE:

SET profiling=On;

使用命令查看结果

SHOW PROFILES;

具体某条的详情

SHOW PROFILE FOR QUERY [query_id]

 

典型的服务器配置

(1)MAX_CONNECTIONS:当前MySQL允许最大连接数151个

(2)table_open_cache:表句柄缓存2000

(3)KEY_BUFFER_SIZE:索引缓冲大小8388608

(4)innodb_buffer_pool_size:INNODB存储引擎缓存池大小,比较重要,尽可能地设置更大

(5)innodb_file_per_table:INNODB表的独立表文件,ON就表示一个表对应一个表文件,否则所有INNODB表文件存到一起

 以上的配置全部取决于实际的运行环境

 

mysqlslap压力测试工具

这是一个mysql自带的工具,是一个EXE,直接运行即可,具体的百度,这是DBA的工作,不是程序员的工作

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9601.html

(0)
上一篇 2023-02-04
下一篇 2023-02-04

相关推荐

  • 了解 Python 中的逻辑运算符 and 和 or

    了解 Python 中的逻辑运算符 and 和 or逻辑运算符是用于在Python中进行逻辑运算的符号。Python中有三种常见的逻辑运算符:

    2024-07-24
    37
  • Python实战|利用Dowhy框架实现因果推断实战(二)「建议收藏」

    Python实战|利用Dowhy框架实现因果推断实战(二)「建议收藏」文章来源:gzh数据万花筒 文章链接:https://mp.weixin.qq.com/s/7uBQ3_sR2j_zxH8mj7nKeQ 点击上方蓝字关注我们 因果推断系列文章分为上下两篇,目录结构如

    2023-04-16
    168
  • sql有什么特点?_神奇守护特性

    sql有什么特点?_神奇守护特性摘要:不要歪了,我这里说特性它不是 bug,而是故意设计的机制或语法,你有可能天天写语句或许还没发现原来还能这样用,没关系我们一起学下涨姿势。 本文分享自华为云社区《【云驻共创】天天写 SQL,你遇到

    2023-06-05
    130
  • Python实战:使用findstr函数快速查找字符串

    Python实战:使用findstr函数快速查找字符串在我们的日常开发和维护中,常常需要查找某个关键字在代码文件或者文本文件中出现的位置。Python的字符串函数库提供了丰富的函数可以用于字符串的处理和查找,其中findstr函数被广泛使用,它可以帮助我们在字符串中快速定位指定的子字符串,并返回位置信息以便于进行进一步的处理。

    2024-01-12
    104
  • 学习 SQL 之前需要了解的基础知识「建议收藏」

    学习 SQL 之前需要了解的基础知识「建议收藏」本文为 SQL 初学者介绍了 SQL 究竟是什么,以及它能做什么事情。因为 SQL 是用来与数据库打交道的,所以,我们也介绍了一些基本的数据库术语。 一、数据库基础 你正在读这这一篇文章,这表明你需要

    2023-05-12
    144
  • 记录sql server 的批量删除主外键的sql语句[通俗易懂]

    记录sql server 的批量删除主外键的sql语句[通俗易懂]select b.name TableName,a.name TypeName,a.* from sysobjects a inner join sysobjects b on a.parent_o…

    2023-03-21
    151
  • 使用PyCharm进行Python调试

    使用PyCharm进行Python调试Python是一门非常强大的语言,支持多种编程范式,也适用于多种应用场景。但是,当我们开发一些复杂的程序时,可能会出现一些错误和问题,这时候需要进行调试。PyCharm作为一个IDE(集成开发环境),不仅可以提供编码、自动补全和运行等基本功能,也支持Python程序的调试。在本篇文章中,我们将探讨如何使用PyCharm进行Python调试。

    2024-05-30
    68
  • 【赵强老师】删除表和Oracle的回收站

    【赵强老师】删除表和Oracle的回收站一、Oracle的Drop Table语句 首先,我们来看一下Oracle Drop Table的语法格式。 解释一下里面的参数: schema Schema表示方案名称,这里可以理解为用户名,缺省为

    2023-02-14
    143

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注