实用排坑帖:SQL语句性能优化操作策略大全
28、索引的使用规范:
29、下列SQL条件语句中的列都建有恰当的索引,但执行速度却非常慢:
分析: WHERE子句中对列的任何操作结果都是在SQL运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引。 如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样:
30、当有一批处理的插入或更新时,用批量插入或批量更新,绝不会一条条记录的去更新。 31、在所有的存储过程中,能够用SQL语句的,我绝不会用循环去实现。 例如:列出上个月的每一天,我会用connect by去递归查询一下,绝不会去用循环从上个月第一天到最后一天。 32、选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。 如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表。 33、提高GROUP BY语句的效率,可以通过将不需要的记录在GROUP BY之前过滤掉。下面两个查询返回相同结果,但第二个明显就快了许多。 低效:
高效:
34、SQL语句用大写,因为Oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。 35、别名的使用,别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快1.5倍。 36、避免死锁,在你的存储过程和触发器中访问同一个表时总是以相同的顺序;事务应经可能地缩短,在一个事务中应尽可能减少涉及到的数据量;永远不要在事务中等待用户输入。 37、避免使用临时表,除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替;大多数时候(99%),表变量驻扎在内存中,因此速度比临时表更快,临时表驻扎在TempDb数据库中,因此临时表上的操作需要跨数据库通信,速度自然慢。 38、最好不要使用触发器:
39、索引创建规则:
40、MySQL查询优化总结: 使用慢查询日志去发现慢查询,使用执行计划去判断查询是否正常运行,总是去测试你的查询看看是否他们运行在最佳状态下。 (编辑:信阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- MySQL – 有没有办法在没有脚本的情况下将bin日志位置包含在
- java – 使用正则表达式验证mysql语句
- Mysql学习SQL Server 2005 安装遇到的错误提示和解决方法
- MYSQL教程Window 下安装Mysql5.7.17 及设置编码为utf8的方法
- 为什么PHP的MySQL驱动程序不转换数据类型?
- 到底选择PostgreSOL还是MySQL?看这里
- mysql-在一个查询的同一字段中为一个日期和一段时间选择时间
- 数据库插入或者更新大批量数据的性能优化
- 阿里P8架构师谈:NoSQL和SQL的区别,NoSQL的使用场景和选型
- mysql-使用SQL命令中的“按/排序”和合并联接为数百万行优化