首页 > 数据库 >mysql优化军规20条

mysql优化军规20条

时间:2023-08-24 12:26:12浏览次数:49  
标签:20 show mysql 查询 索引 limit 军规

一. 优化军规20条:
1.where 查询条件,类型要一致,避免类型转换,非常慢
2.查询条件包含函数,负向查找,导致大表,多表联合查询奇慢
3.in子查询超时,将子查询in 改造为临时表或表值参数后join
4.尽量不在数据库做运算,复杂运算转移到程序端CPU计算,尽量简单使用mysql
5.控制单表数据量,int型不超过1000万行,
6.控制单库不超过300个表
7.控制表字段数少儿精,单行不超过200byte,单表不超过30个Int,20个char(10)
8.拒绝大sql,大事务,大批量
9.将字符转为数字:更高效,查询更快,占用空间更小
10.避免使用null字段:都给默认值,否则加索引需额外空间,查询不走索引
11.不用大字段类型text/blob,可以查分到单独的表或mongodb
12.用自增和int作为innodb的主键
13.1个sql只能在一个cpu运算,高并发中大sql可能把整个数据库拖死,需化解为多个简单sql在多cpu运算,减少锁表时间
14.避免%前缀模糊查询,使用不了所有,全表扫描
15.select * from table limit 10000,10 偏移量越大越慢,推进分页:select * from table where id>10000 limit 11
16.高级分页方式:select * from table where id>=(select id f from table limit 1000,1) limit 10;
17.常用命令:explain,show profile,show slow log,show processlist,show query_response_time(percona)
18.统一字符集:utf8
19.校对规则:utf8_general_ci
20.库,表名称统一用小写字母,索引命名默认为idx_字段名

二. mysql优化demo:
大表,多表,多列联查,部分字段没有使用到索引,回主表查询导致整个查询慢的解决方案 (此类问题已解决,记录到这里做记录,类似问题可以参考这样处理)

1.根据查询的列来自不同的表,注释字段排除,看看慢的原因是查询那个表的字段;
2.定位到查询慢的表后,查看执行计划,分析此表的执行计划是否有用到索引,用的那个索引,索引是否包含要查询的字段,若没有可以添加包含字段;
3.如此一 一检查每个表查询慢的字段,到最终解决查询慢的原因。

标签:20,show,mysql,查询,索引,limit,军规
From: https://www.cnblogs.com/chenshaojun2008/p/17653835.html

相关文章

  • ACM MM 2023|放心,“噪”不住你的美!美图&国科大联合提出人脸修复方法DiffBFR
    前言 美图影像研究院(MTLab)与中国科学院大学共同提出盲人脸图像修复方法DiffBFR,用于修复退化模型未知的低质量图像。该方法探索了两种生成式模型GAN和DPM对长尾问题的适应性,设计合适的人脸修复模块来得到更加准确的细节信息,进而降低生成式方法带来的脸部过平滑现象,从而提高修复......
  • 【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失
    问题起因最近公司有个甲方项目参加竞赛,要求在(基于kubeflow/arena)平台上部置应用,可以将MySQL打包在应用一起,也可以分开部署,没有提供volume相关的支持。大意是可以把初始好的数据直接拿到平台上。经过本人在Linux虚机中启动MySQL容器导入数据再dockercommit出镜像部署到平台......
  • mysql 主从复制原理
    mysqlmaster主库启动binlog日志,每次执行的数据库操纵语句写入binlog,从库定期启动一个i/o线程去binlog日志,将binlog日志写入从库的relaylog(中继日志),再启动sql线程去将relaylog日志将数据重放,其他都是顺序读写,这个步骤是可能造成延迟的主要原因解决办法:1、从库配置比主库好,2......
  • Mysql 定时备份数据库脚本
    Mysql定时备份数据库;并且删除X天前的备份数据;1.  创建数据目录mkdirdatacd/data2.  编写脚本文件    vim  backup.sh#!/bin/bash#日期dd=`date+%Y-%m-%d-%H-%M-%S`#保存备份个数,备份2天数据backup_clean_day=2#用户名username=root#密......
  • MySQL相关
    mysql-悲观锁使用select...forupdate,就实现了。zhelyao注意,mysql的select...forupdate语句,会把所有扫描的行都锁上,所以在mysql中使用悲观锁,我们必须要确定走了索引,不然可能会全表扫描,锁住整个表。mysql-乐观锁在我们要修改前,先查询一个这个值和一个自己维护的版本号,记录下来......
  • Python-PyMySQL的一些使用注意事项
    一、关于groupby的使用在部分mysql版本(5.7.xx及以上)中,若select的列中,包含了未被groupby的字段,会报以下错误:[Err]1055-Expression#1ofORDERBYclauseisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'xxxx'whichisnotfunctionallydependentoncolu......
  • 20230710 java.lang.SuppressWarnings
    介绍java.lang.SuppressWarnings声明@Target({TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,MODULE})@Retention(RetentionPolicy.SOURCE)public@interfaceSuppressWarnings阻止某个给定类型的警告信息value的常见值all:忽略所有类型的警告。u......
  • 20230711 java.security.MessageDigest
    介绍java.security.MessageDigestpublicabstractclassMessageDigestextendsMessageDigestSpiAPIstaticgetInstanceMessageDigestgetInstance(Stringalgorithm)throwsNoSuchAlgorithmExceptionMessageDigestgetInstance(Stringalgorithm,Stringprovider)......
  • 20230823 java.io.FileWriter
    介绍java.io.FileWriterpublicclassFileWriterextendsOutputStreamWriter用于写出文件字符流可以指定编码API构造器FileWriter(StringfileName)throwsIOExceptionFileWriter(StringfileName,booleanappend)throwsIOExceptionFileWriter(Filefile)thro......
  • 20230823 java.io.FileReader
    介绍java.io.FileReaderpublicclassFileReaderextendsInputStreamReader用于读入文件字符流可以指定编码API构造器FileReader(StringfileName)throwsFileNotFoundExceptionFileReader(Filefile)throwsFileNotFoundExceptionFileReader(FileDescriptorfd)......