位置: 编程技术 - 正文

MySQL查询优化的5个实用技巧(mysql查询性能优化)

编辑:rootadmin

推荐整理分享MySQL查询优化的5个实用技巧(mysql查询性能优化),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql查询慢的优化方案,mysql查询优化的一个过程,mysql查询性能优化,mysql 查询 优化,mysql查询优化的一个过程,mysql查询优化的一个过程,mysql查询优化的一个过程,mysql查询优化的优点是什么,内容如对您有帮助,希望把文章链接给更多的朋友!

本文总结分析了MySQL查询优化的技巧。分享给大家供大家参考,具体如下:

熟悉SQL语句的人都清楚,如果要对一个任务进行操作的话,SQL语句可以有很多种相关写法,但是不同的写法查询的性能可能会有天壤之别。

本文列举出五个MySQL查询优化的方法,当然,优化的方法还有很多。

1、优化数据类型

MySQL中数据类型有多种,如果你是一名DBA,正在按照优化的原则对数据类型进行严格的检查,但开发人员可能会选择他们认为最简单的方案,以加快编码速度,或者选择最明显的选择,因此,你可能面临的都不是最佳的选择,如果可能的话,你应该尝试以通用准则来改变这些决定。

(1)避免使用NULL

NULL对于大多数数据库都需要特殊处理,MySQL也不例外,它需要更多的代码,更多的检查和特殊的索引逻辑,有些开发人员完全没有意识到,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默认值。

(2)仅可能使用更小的字段

MySQL从磁盘读取数据后是存储到内存中的,然后使用cpu周期和磁盘I/O读取它,这意味着越小的数据类型占用的空间越小,从磁盘读或打包到内存的效率都更好,但也不要太过执着减小数据类型,要是以后应用程序发生什么变化就没有空间了。修改表将需要重构,间接地可能引起代码的改变,这是很头疼的问题,因此需要找到一个平衡点。

2、小心字符集转换

客户端或应用程序使用的字符集可能和表本身的字符集不一样,这需要MySQL在运行过程中隐含地进行转换,此外,要确定字符集如UTF-8是否支持多字节字符,因此它们需要更多的存储空间。

MySQL查询优化的5个实用技巧(mysql查询性能优化)

3、优化count(my_col)和count(*)

如果你使用MyISAM表,在没有where子句的情况下使用count(*)速度是很快的,因为行数量的统计是非常精确的,因此MySQL不会一行一行地去找,进而得出行数,如my_col列没有空值,那么和前面说的情况会一样,即count(my_col)速度也会很快。

如果有where子句时使用count( ),基本上就无法进行更多优化了,在where子句中超出了明显的索引列,对于复杂的where子句,只有使用覆盖索引才有用。

除了上面的建议外,你还可以使用汇总表,它们让你可以对表的内容保持更新,你可以使用触发器,或者应用程序逻辑保持汇总表总是最新状态,或者定期运行一个批处理作业保持填充最新的数据信息,如果你采用后者,你的信息将会非常接近,但不是精确的,依赖于批处理作业多久运行一次,这需要权衡应用程序对精确信息的需要,和保持数据更新的系统开销,要在这二者之间找到一个平衡点。

4、优化子查询

遇到子查询时,MySQL查询优化引擎并不是总是最有效的,这就是为什么经常将子查询转换为连接查询的原因了,优化器已经能够正确处理连接查询了,当然要注意的一点是,确保连接表(第二个表)的连接列是有索引的,在第一个表上MySQL通常会相对于第二个表的查询子集进行一次全表扫描,这是嵌套循环算法的一部分。

5、优化UNION

在跨多个不同的数据库时使用UNION是一个有趣的优化方法,UNION从两个互不关联的表中返回数据,这就意味着不会出现重复的行,同时也必须对数据进行排序,我们知道排序是非常耗费资源的,特别是对大表的排序。

UNION ALL可以大大加快速度,如果你已经知道你的数据不会包括重复行,或者你不在乎是否会出现重复的行,在这两种情况下使用UNION ALL更适合。此外,还可以在应用程序逻辑中采用某些方法避免出现重复的行,这样UNION ALL和UNION返回的结果都是一样的,但UNION ALL不会进行排序。

小结

虽然本文列举的优化方法并不完全,但无论何时,只要可能,尽可能尝试不同的解决方案,查看查询计划,在大数据集上进行测试,并会定位结果基准点,观察在实际应用中的情况怎么样。同时,事先查看一下你的慢速查询日志,尽可能早地找出需要调整的查询。

希望本文所述对大家MySQL数据库程序设计有所帮助。

PureFTP借助MySQL实现用户身份验证的操作教程 pureftp集成mysql身份验证是将ftp用户信息保存到mysql数据库中,这样可以对大量的ftp服务器做集中管理,对用户帐号的维护只要通过mysql的操作就可以完成

使MySQL能够存储emoji表情字符的设置教程 MySQL需要支持emoji表情符号版本需要大于5.5.3,且字符集需要设置为utf8mb4字符集。utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节

MySQL中查询日志与慢查询日志的基本学习教程 一、查询日志查询日志记录MySQL中所有的query,通过"--log[=file_name]"来打开该功能。由于记录了所有的query,包括所有的select,体积比较大,开启后对性能

标签: mysql查询性能优化

本文链接地址:https://www.jiuchutong.com/biancheng/312461.html 转载请保留说明!

上一篇:MySQL嵌套查询实例详解(mysql嵌套语句)

下一篇:PureFTP借助MySQL实现用户身份验证的操作教程

  • 个体工商户增值税优惠政策2023
  • 房产公司企业所得税如何预征
  • 其他应收款期末余额为负数是什么意思
  • 公司向公司借款可以无息吗
  • 三方合同怎么盖章
  • 存货占营业收入的意义
  • 中介行业风险
  • 现金日记账划线更正法
  • 往来账审计存在问题及建议
  • 非货币性资产交换补价大于25%的会计处理
  • 本金加收入减支出等于的是利润吗
  • 技术转让收入纳税调整
  • 路桥年费税额抵扣账务处理怎么做?
  • 管理费用多计提了怎么冲
  • 营改增后企业出售房产涉税
  • 低值易耗品进项税额转出账务处理
  • 印花税新法
  • 工会经费什么时候返还给企业
  • 以前年度的费用可以入在当年吗?
  • 二手车交易增值税按照多少征收税率减半征收
  • 预提费用的会计分录2018
  • 多提费用没计入以前年度损益调整,汇算时怎么处理
  • cpu不支持vt怎么办
  • i912900k用什么主板好
  • 什么叫盘活存量股票
  • 企业如何选择会计准则
  • 或有事项的计量结束语
  • qdcsfs.exe - qdcsfs是什么进程 有何作用
  • php代码用什么工具
  • 代垫运费的增值税可以抵扣吗
  • js实现功能
  • js浅拷贝和深拷贝的方法
  • 自动驾驶 模块
  • 背景渐变 css
  • python获取值对应的键
  • 详细步骤怎么写
  • 工程结算 增值税
  • 一般贸易和进料加工退税的区别
  • 配件盘点的方法
  • 注册一个公司没有流水可以吗
  • 高效快速编制会计分录如何做?
  • CentOS 6.5 x64系统中安装MongoDB 2.6.0二进制发行版教程
  • 非营利组织缴纳增值税账务处理
  • 没有盈利的公司
  • 如何查询金税盘发票金额及开票数量
  • centos彻底删除文件
  • 劳务报酬和工资薪金有什么区别
  • 工会经费怎样使用
  • 运动会活动奖品
  • 银行抵债资产如何更快处置
  • 公司注销应收账款如何转让给第三方
  • 支付给个人的佣金如何代扣个税
  • 发票免税怎么做账
  • 贷款的融资担保费
  • 以前年度的费用忘记入账怎么办
  • 资金占用费如何计算企业所得税
  • 机票退票手续费太贵怎么办
  • 付给外包公司的垃圾处理费会计分录
  • 快速切换用户是什么意思
  • xp系统蓝屏解决
  • Linux系统网络配置
  • ubuntu12.04系统怎么安装PPS播放器?
  • win7系统所有软件打不开
  • win8.1操作界面
  • win10怎么将桌面图标变小
  • javascript中
  • nodejs实现文件压缩下载
  • dos批处理命令大全
  • cocos2dx quick lua 学习笔记1
  • iphone触控手势
  • js有多重模块定义方式
  • 网页文件的标记是
  • Android调用jni获取mac地址
  • 计算两gps坐标之间距离
  • 【Rayeager PX2分享】OpenCV入门之线段检测
  • 成都税务局网上办事大厅
  • 电子税务局增值税申报表下载
  • 代扣代缴企业所得税会计分录
  • 大同地税局地址
  • 税控机发票打印机怎么用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设