MySQL优化__基础优化注意选项

【MySQL优化】MySQL 高并发配置优化基础知识 【MySQL优化】MySQL 高并发配置优化基础知识 MySQL的优化分为两个部分,一是服务器物理硬件的优化,二是MySQL自身(my.cnf)的优化。 一、服务器硬件对MySQL性能的影响 ① 磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,这种硬盘理论上每秒寻道7200次,这是物理特性决定的,没有办法改变。 MySQL每秒钟都在进行大量、复杂的查询操作,对磁盘的读写... 阅读详情

SQL语句基本优化

 MySQL优化:我们在写SQL的过程中要注意一些点,合理地SQL对于项目的稳定性以及未来的发展性以及可塑性都是至关重要的。该篇是一些最简单的优化点。

1. SQL语句中包含的值不应该过多

 MySQL对于IN做了相应的优化,即将IN中的常量全部都储存在一个数组里面,而且这个数组还是排好序的。但是如果数值太多,产生的性能消耗也是比较大的。

 建议:

1. 对于连续数值,能用 between 就不要用 in 。
2. 如果不方便使用 between 可以考虑使用连接来替换。

例如:
SELECT id FROM iot_product_discount p WHERE p.`id` IN (1, 2, 3, 4);

优化为:
SELECT id FROM iot_product_discount p WHERE p.`id` BETWEEN 1 AND 4;

 
2. select 语句指定查询字段

 SELECT * 的缺点有:

1. 增加了很多不必要的消耗(CPU、IO开销、内存、网络带宽等)。
2. 因为是查询所有的,所以可能会为了一些我们不需要的数据而产生索引失效或覆盖索引的可能性。
3. 当表结构发生变更时,往往可能将一些我们不希望展示的数据发送出去。
4. select * 的操作需要数据库先 Query Table Matedata For Columns,增加了数据库的负担,
   然而并没有提高效率。

 建议:即使是要全部数据,也麻烦将其字段全都标明。除了在写SQL的时候可能会更长一点,并不会带来其他坏处。

 
3.确定只有一条数据的时候,使用 limit 1

 原因:

1. 如果加上 limit 1 将会使 explain 中的 type 列类型到达 const 类型。
2. 第二点是对上一点的原理补充。
   因为加上了 limit 1 后,将会避免全表扫描,找到了相对应结果就不会再继续扫描了。

4.排序字段没有用到索引,就尽量少排序

 原因:

1. 巧妇难煮无米之炊。既然数据库对数据进行了排序,比之不排序,肯定是加大了性能消耗。
2. 如果需要排序,那么排序字段有没有索引对性能消耗差别比较大。有索引的字段,性能开销小。
3. 还有一点,注意SQL的书写,在临时表中进行排序会花费巨大的性能消耗(如果临时表还不小的话)。

 

5.限制条件中其他字段没有索引,尽量少用 or

 原因: OR 两边的字段中,如果有一个不是索引字段,而其他条件也不是索引字段,会造成该查询不走 索引的效果。
 建议:可以考虑使用 union all 或是 union的方式来代替 or 会得到更好的效果。
 

6.分清 union all 和 union 的使用

  union all 和union都是将两个结果集合进行合并操作,而它们的区别是union all不会作结果唯一性过滤处理。

 原因: union 操作会在两个结果集合合并后进行排序,那么就不可避免得会增加CPU运算,加大资源消耗和延迟。

 建议:在能够确定两个结果集合没有重复数据的情况下,使用union all 来代替union。

 
7.避免在where子句中对字段进行表达式操作

 原因: 在where子句中对字段进行算术运算将会导致引擎放弃使用索引。

例如:

SELECT id,discount FROM iot_product_discount p WHERE p.`discount` * 2 = 66;

可以优化为:
SELECT id,discount FROM iot_product_discount p WHERE p.`discount` = 66/2;

 
8.联合索引要遵守左前缀法则

 举例来说,如果索引中包含有字段id、name、school,可以直接用id字段,也可以用id、name这样的顺序,但是name、school都无法使用这个索引。所以在创建联合索引的时候一定要注意索引字段的顺序,把常用的查询字段放在前面。

9.避免在where子句中对字段进行null值判断

 原因: 在where子句中对字段进行 null 判断会使引擎放弃使用索引而进行全表扫描。

10.分段查询

 在一些用户选择页面中,可能有一些用户的选择的时间范围过大,造成查询缓慢的结果。主要的原因就是扫描行数过多。这个时候可以通过程序,进行分段查询,循环遍历,将结果合并处理。

建议:在扫描的行数接近百万的时候,就应该使用程序分段查询。

11. 注意 in 和 exists的区别

  我们先开看着用 IN 和 EXISTS 的SQL区别。

IN:
	SELECT * FROM iot_product_discount p WHERE  p.`flow_product_id` 
		IN(SELECT id FROM iot_flow_product);

EXISTS:
	SELECT * FROM iot_product_discount p WHERE 
		EXISTS(SELECT * FROM iot_flow_product f WHERE f.`id` = p.`flow_product_id`);

 区分 IN 和 EXISTS 两个关键字的原理。
两者的驱动顺序不一致(这是性能变化的关键)。
 如果是 in,那么子查询为驱动表,先执行查询,所以IN适合 外表大而内表小的情况。
 如果是exists,那么以外层为驱动表,先被访问。所以EXISTS适合外表小而内表大的情况。

12.小心 not in 和 not exists

 关于not in 和 not exists, 这边推荐使用not exists,不仅仅是因为效率问题,还有是因为 not in 可能存在逻辑问题。

NOT IN:
	SELECT * FROM iot_product_discount p WHERE  
		p.`flow_product_id` NOT IN(SELECT id FROM iot_flow_product);

优化:
	SELECT * FROM iot_product_discount p LEFT JOIN iot_flow_product f 
		ON p.`flow_product_id` = f.`id` AND f.`id` IS NULL;
该SQL最后取得的范围是下图表A中黄色的部分(不包含绿色的)。

表A

mysql-常见问题,索引优化 mysql日常使用过程中遇到的问题,以及解决办法,包括discount的bug,avg(null),紧凑索引,松散索引,以及索引优化 立即下载

相关推荐

Stata实战:用双向固定效应模型分析房价,从数据清洗到结果解读(附完整代码)

本文详细介绍了如何使用Stata实现房价数据的双向固定效应模型分析,从数据清洗到结果解读的全流程。通过具体代码示例,帮助读者掌握面板模型的应用技巧,特别适合经济学和金融学研究者进行房价影响因素分析。

weixin_31528001的博客 277

mysql中discount用法_MySQL 技巧:COALESCE 函数的使用

COALESCE() 函数可以接收多个参数,并返回第一个非 NULL 的参数。如果所有参数都为 NULL,则 COALESCE() 函数返回 NULL。例如:COALESCE(NULL, 1, 2); # => 1COALESCE(NULL, 'hi'); # => 'hi'COALESCE(4, NULL, 2); # => 4COALESCE(NULL, NULL); # =...

weixin_29870587的博客 3662

Flink实战项目——城市交通实时监控平台

本项目是与公安交通管理综合应用平台、机动车缉查布控系统等对接的,并且基于交通部门现有的数据平台上,进行的数据实时分析项目。

yangwei2048的博客 837

mysql中discount用法,Discounts

Discounts⌘当前价格: 0⌘支持系统: OS X 10.11⌘开发者:⌘服务支持: 官方页面安全下载累计下载次数: 45Promotional items is one way to save money, and thus earn money.Stay up to date with sales, promo, coupons and discounts in your city, a...

weixin_30849865的博客 2247

在已有win10系统下安装Ubuntu,最后出现执行‘grub-install/dev/nvme0n1p5‘失败的致命错误的解决方案

本人电脑型号戴尔灵越,两个SSD512G固态硬盘,c盘为系统盘. Ubuntu版本为20.04LTS,在官网下载https://ubuntu.com/download/desktop/thank-you?version=20.04.3&architecture=amd64 系统盘制作工具为Rufus-3.15http://rufus.ie/zh/ 安装过程网上很多,在这里就不赘述了. 其他安装过程都很顺利,直至安装最后出现这个 本来安装了到最后还以为成了,结果又不行...... 后.

XiaoChen_gugugu的博客 1万+

【FPGA】安路FPGA下载器驱动安装教程

#来自学渣的问候 最近正在参加19年的FPGA创新设计大赛,然后我们选择了安路(全名:上海安路信息科技有限公司)的 FPGA 开发板。安路算是国产FPGA中还不错的一家,和紫光一样,除了自主生产的FPGA,也开始拥有了自己的编译环境。 好了。言归正传,写这篇博客的原因是,前几天在安装 安路 的编译环境和下载器驱动的时候,出了点问题,弄得心烦意乱。所以打算解决之后写篇博客,避开这个神奇的问题。 首先...

Ninquelote的博客 2万+

MySQL基础讲解

什么是数据库? 数据库是按照数据结构来组织,存储和管理数据的仓库。每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复杂所保存的数据。也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。所以,现在我们使用关系型数据库管理系统来存储和管理的大数据量,所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 RDBMS及关系数据

Shirley_John_Thomas的博客 1988

antv x6 沿边图标循环动画实现

2.使用transition给边设置动画,利用complte方法实现循环动画。实现效果,如下图,边上存在两个图标,要求图标延边一直循环动画。1.注册一个自定义边,边上定义两个图标,并设置其初始位置。

lingliu0824的博客 3366

以mysql实现按星期打折

【代码】以mysql实现按星期打折。

qq_29744347的博客 287

学Simulink——基于软开关与高频变换的整流器系统场景实例:移相全桥ZVS整流器在轻载条件下的效率优化

本文以Simulink为平台,详细介绍了移相全桥ZVS整流器在轻载条件下的建模与优化方法。通过六个步骤系统讲解了从项目创建到仿真运行的全过程,重点分析了移相全桥拓扑结构、ZVS检测逻辑设计及轻载特性。结果显示,传统移相全桥在轻载时ZVS失效导致效率下降(<88%)。针对此问题,提出了动态频率调整、不对称半桥模式等优化策略。该案例为理解软开关技术、提升电源效率提供了实用建模方法和优化思路。

xiaoheshang_123的博客 117

Python 爬虫实战:豆瓣 / IMDB 电影数据抓取(评分 + 剧情 + 演员阵容结构化处理)

在数据为王的时代,电影数据是进行市场分析、推荐系统构建和学术研究的重要资源。豆瓣和 IMDB 作为国内外最具影响力的电影评分和资讯网站,包含了海量高质量的电影数据。本文将带领你从零开始,构建一个健壮的 Python 爬虫,用于抓取豆瓣和 IMDB 的电影信息,并将其中的非结构化数据(如剧情简介、演员列表)进行清洗和结构化处理,最终存储到便于分析的结构化文件(如 CSV)中。

yansideyucsdn的博客 956

MySql——函数的创建以及使用——六月十六

MySQL 中的函数跟 Python 中的函数没有太多的差异,因为函数都是用来封装功能上相对独立且会被重复使用的代码的。如果非要找出一些差别来,那么 MySQL 中的函数是可以执行 SQL 语句的。

qq_59344127的博客 877

FPGA JTAG接口设计全解析

JTAG是FPGA开发的核心接口,主要用于代码下载和在线调试。14-pin设计中包含TCK、TMS、TDI、TDO四个关键信号,采用信号-地布局增强抗干扰能力,TCK建议串联电阻。10-pin设计需注意转接适配,并推荐使用RCLAMP0524P等低电容TVS二极管进行ESD防护。两种接口设计都强调信号完整性和可靠性,建议PCB布局时保持JTAG走线短且预留调整空间。

在读研究生,FPGA电路设计与功能开发。 2182

MySQL单表数据量大优化方案及注意事项

问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死。严重影响业务。 问题前提:老系统,当时设计系统的人大概是大学没毕业,表设计和sql语句写的不仅仅是垃圾,简直无法直视。原开发人员都已离职,到我来维护,这就是传说中的维护不了就跑路,然后我就是掉坑的那个!!! 我尝试解决该问题,so,有个这个日志。 方案概述 方案一:优化现有mysql数据库。优点:不影响现有业务,

亮亮的专栏 8199

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

mysql优化选项

cd mysql-5.0.27 # CHOST="i686-pc-linux-gnu" CFLAGS="-O3 -msse2 -mmmx -mfpmath=sse -mcpu=pentium4 -march=pentium4 -pipe -fomit-frame-pointer" CXXFLAGS="-O3 -msse2 -mmmx -mfpmath=sse -funroll-loops -mcp

892

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MySQL基础、优化以及注意事项

定位低效率SQL语句、优化SQL语句的手段 慢查询日志:日志文件中查找 show processlist:实时查看正在进行的慢SQL语句,包括线程的状态、是否锁表等 show profiles:可以使用该命令分析SQL语句所经历的耗时 trace:使用trace可以查看SQL优化器的信息 explain:该命令可以查出SQL语句在执行过程。比如是否使用了索引、执行顺序、执行的条件等等 ...

Yong Ledo的博客 446

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

MySQL基础及需要注意的问题

MySQL基础及需要注意的问题一、MySQL语法1、如何查看一个已经建好表的表结构或表创建语句?2、char和varchar有什么区别,varchar(255)和varchar(256)有什么区别 ?char和varchar的区别varchar(255)和varchar(256)的区别3、text和blob有什么区别?4、使用LIKE关键字时'%'和'_'有什么作用?5、delete、 drop、...

sruokun的博客 645

MySQL面试必备:基础语法与性能优化全解析

MySQL是目前最流行的开源关系型数据库之一,掌握MySQL的基本语法和优化技巧是每个数据库开发人员的必备技能。本文将从基础语法入手,结合实际案例,深入浅出地讲解MySQL的常用操作和性能优化方法,帮助读者在面试中脱颖而出。本文系统地讲解了MySQL的基础语法、联表查询及性能优化技巧。掌握这些内容不仅能帮助您应对面试,还能在实际开发中高效地设计和优化数据库。建议结合实际项目多加练习,深入理解索引和查询优化的原理。最后,祝您在MySQL学习和面试中取得优异成绩!。

2201_75525624的博客 1331

mysql优化以及注意事项

【代码】mysql优化。

weixin_35776533的博客 209

Mysql索引优化注意

提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意) 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num...

u010277958的博客 147

MySQL基础总结

MySQL基础总结

java程序鱼的博客 1万+

【MySQL 进阶之路】基础语法及优化技巧

DML 是数据库操作语言的子集,用于数据的增、删、改、查四个基本操作。熟悉并掌握 MySQL 的 DML 基础语法对于数据库开发至关重要。通过合理运用 `INSERT`、`SELECT`、`UPDATE`、`DELETE`,以及各种查询优化技巧,可以显著提高数据库的性能和查询效率。在实际开发过程中,合理的索引设计、联表查询优化以及事务管理是提升应用性能和数据一致性的重要手段。

ajsbxi的博客 1343

MySQL:从基础操作到性能优化的全方位指南

MySQL作为一款开源且高效的关系型数据库管理系统,广泛应用于各类数据管理场景。本文详细介绍了MySQL的基础操作、高级特性及性能优化策略。基础操作部分涵盖了数据库与表的创建、数据的增删改查(CRUD)等基本功能。高级特性部分探讨了索引、事务、存储过程与函数等复杂功能,帮助提升数据处理效率。性能优化部分则从查询优化、数据库配置优化和硬件优化三个角度出发,提供了提升MySQL性能的实用建议。通过掌握这些技巧,开发者可以更高效地利用MySQL进行数据管理,为项目提供坚实的数据支持。

pikawa10的博客 1976

mysql(一) 使用注意事项及优化

mysql crud 数据库 1、Mysql大小写问题 (关键字BINARY) 2、MySQL自身的缓存问题 3、合理使用exist & in 4、索引失效的情景 (常见的情景) 情景1:隐式转换导致索引失效 情景2:查询条件包含or且字段列不含索引 情景3:对索引的列进行数值运算,索引失效 情景5:当查询条件为大于等于、in等范围查询时,根据查询结果占全表数据比例的不同,优化器有可能会放弃索引,进行全表扫描 情景6:特殊的语句 ,not in、not exists、is 情景7:删除冗余和无效的索引

DJyzh的博客 2405

MySQL 客户端常用选项

本文为整理 mysql 可用选项,排序以 a-z 排序举例。 –help, -? 显示帮助消息并退出。 –auto-vertical-output 如果结果集对于当前窗口而言太宽,则导致结果集垂直显示,否则使用常规表格格式。(这适用于以 ; 或终止的语句 \G。) –batch, -B 使用tab作为列分隔符打印结果,每一行都换行。有了这个选项, mysql 不使用历史文件。 –binary-as-hex 给出此选项后,mysql将使用十六进制表示法(0xvalue)显示二进制数据。无论整体输出显示格式是表

一七令 1241

MYSQL优化注意点

MySQL: 1. avoid full table scan, so please consider to create index on the column of where, orderby 2. avoid null value check 应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值,确保表中num列没有null值,然后再如下查询 selec.

fyifei0558的专栏 195
上一篇: MySQL认知__explain简介(下)
下一篇: Redis_配合Lua做Java分布式事务锁
pseudonym_
博客等级 码龄10年 88粉丝 205原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值