当前位置: 首页 > news >正文

MySQL面试题之如何优化一条有问题的SQL语句?

如何优化一条有问题的sql语句?

针对sql语句的优化。我们可以从如下几个角度去分析

  1. 回归到表的设计层面,数据类型选择是否合理

  2. 大表碎片的整理是否完善

  3. 表的统计信息,是不是准确的

  4. 审查表的执行计划,判断字段上面有没有合适的索引

  5. 针对索引的选择性,建立合适的索引(就又涉及到大表DDL的操作问题)

我们看第一点:数据类型要选取合适一些才好。

1)比如建议使用int来存储ipv4的类型,然后通过函数转换。例如:

mysql> select inet_aton('172.31.30.62');
+---------------------------+
| inet_aton('172.31.30.62') |
+---------------------------+
|                2887720510 |
+---------------------------+
1 row in set (0.00 sec)

mysql> select inet_ntoa(2887720510);
+-----------------------+
| inet_ntoa(2887720510) |
+-----------------------+
| 172.31.30.62          |
+-----------------------+
1 row in set (0.00 sec)

2)时间类型可以采用datetime属性,他比timestamp可用范围大,存储空间也从原来的8字节降到了5字节,因此可提高性能。

3)表字符集使用 utf8,必要时可申请使用 utf8mb4 字符集。

它的通用性比 gbk,latin1 都要好。utf8 字符集存储汉字占用 3 个字节,如果遇到表情存储的要求,就可以使用 utf8mb4

4) select 查询表的时候只需要获取必要的字段,避免使用 select *。

这样可以减少网络带宽消耗,还有可能利用到覆盖索引

5)所有字段定义中,默认都加上 not null 约束,避免出现 null。

在对该字段进行 select count() 统计计数时,可以让统计结果更准确,因为值为 null 的数据,不会被计算进去的。

6)SQL语句中,尽量避免出现 or 子句

这种判断的子句可以让程序自行完成,不要交给数据库判断。也要避免使用 union,尽量采用 union all,减少了去重和排序的工作。

转载于:https://www.cnblogs.com/FengGeBlog/p/10284282.html

相关文章:

  • UOJ131 [NOI2015] 品酒大会
  • uoj#349. 【WC2018】即时战略(动态点分治)
  • 未来科技展亮相杭州 七大5G应用领域打开全新想象
  • 在Linux下创建文件,文件名中包含当前时间
  • Java源码解析 - ThreadPoolExecutor 线程池
  • 通过sys.objects查询SQL SERVER数据库改动内容
  • 共轭分布
  • 为什么要用IPython/Jupyter?
  • Java8实用技能
  • 悉尼将举办农历节庆典迎猪年
  • 2018,你的专属云上回忆录
  • transform matrix阅读后的理解
  • 15对金婚夫妻亮相《挑战不可能之加油中国》分享婚姻心得
  • 一文带你快速了解,python是如何解析XML文件
  • 验证码图片识别相关博客收集
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • Angular Elements 及其运作原理
  • java2019面试题北京
  • js面向对象
  • Linux后台研发超实用命令总结
  • Vim Clutch | 面向脚踏板编程……
  • Vue.js-Day01
  • vue2.0项目引入element-ui
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 技术发展面试
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 实习面试笔记
  • 使用common-codec进行md5加密
  • 事件委托的小应用
  • 网络应用优化——时延与带宽
  • 微信公众号开发小记——5.python微信红包
  • 微信小程序设置上一页数据
  • 阿里云ACE认证之理解CDN技术
  • 交换综合实验一
  • ​ssh免密码登录设置及问题总结
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​水经微图Web1.5.0版即将上线
  • $(function(){})与(function($){....})(jQuery)的区别
  • (007)XHTML文档之标题——h1~h6
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (6)STL算法之转换
  • (java)关于Thread的挂起和恢复
  • (二)学习JVM —— 垃圾回收机制
  • (三)模仿学习-Action数据的模仿
  • (算法)求1到1亿间的质数或素数
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .net refrector
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net6 webapi log4net完整配置使用流程
  • .net和jar包windows服务部署
  • ??javascript里的变量问题
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法