MySQL面试题之如何优化一条有问题的SQL语句?
2023-09-11 14:18:55 时间
如何优化一条有问题的sql语句?
针对sql语句的优化。我们可以从如下几个角度去分析
-
回归到表的设计层面,数据类型选择是否合理
-
大表碎片的整理是否完善
-
表的统计信息,是不是准确的
-
审查表的执行计划,判断字段上面有没有合适的索引
-
针对索引的选择性,建立合适的索引(就又涉及到大表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,减少了去重和排序的工作。
相关文章
- Python——MySQL操作,使用mysql.connector
- MySQL索引面试题分析(索引分析,典型题目案例)
- Java连接MySQL数据库及简单操作代码
- spring学习笔记(19)mysql读写分离后端AOP控制实例
- shell脚本实现mysql自动登录
- 【MySQL】再说MySQL中的 table_id
- Linux - mysql 异常: ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
- Mysql优化的几点总结
- mysql分享一:运维角度浅谈MySQL数据库优化
- MYSQL中的乐观锁实现(MVCC)简析
- Mysql一个非常有用的内置函数今天碰到要把MySQL数据库中的varchar转换成date类型进
- MySQL两千万数据优化&迁移
- mysql 命名规则:表名,字段名,索引名,视图名,等等
- mysql where过滤条件中and连接的两个条件的顺序不必和建立的联合索引的字段顺序一致_mysql and 顺序_mysql执行过程以及顺序
- MySQL优化:如何避免回表查询?_什么是索引覆盖?
- MySQL面试题 数据库设计三范式
- MySQL数据的插入更新和删除
- MYSQL导入数据报错|MYSQL导入超大文件报错|MYSQL导入大数据库报错:2006 - MySQL server has gone away
- MySQL 5.6 for Windows 解压缩版配置安装
- 【MySQL笔记】mysql来源安装/配置步骤和支持中国gbk/gb2312编码配置
- Linux MySQl 5.7.17 MySQL ERROR 1366(HY000):Incorrect string value 解决方法
- 安全测试===Mysql 注入技巧学习 MySQL注入技巧(2)
- mysql_22 _ MySQL有哪些“饮鸩止渴”提高性能的方法?
- mysql_10 _ MySQL为什么有时候会选错索引?
- MySQL缺失mysql_config文件
- Mysql char(10) 与 varchar(10)的区别
- [django1.6]跑批任务错误(2006, 'MySQL server has gone away')
- MySQL----MySQL常用的数据库数据表备份与恢复的方法
- Mysql之安全清理mysql-slow.log
- Mysql安装多台mysql