Simple optimizations
You can sometimes use MyISAM’s COUNT(*) optimization to your advantage when you
want to count all but a very small number of rows that are well indexed. The following
example uses the standard world database to show how you can efficiently find the
number of cities whose ID is greater than 5. You might write this query as follows:
mysql> SELECT COUNT(*) FROM world.City WHERE ID > 5;
If you examine this query with SHOW STATUS, you’ll see that it scans 4,079 rows. If you
negate the conditions and subtract the number of cities whose IDs are less than or equal
to 5 from the total number of cities, you can reduce that to five rows:
242 | Chapter 6: Query Performance Optimization
mysql> SELECT (SELECT COUNT(*) FROM world.City) - COUNT(*)
-> FROM world.City WHERE ID <= 5;
This version reads fewer rows because the subquery is turned into a constant during
the query optimization phase, as you can see with EXPLAIN:
+----+-------------+-------+...+------+------------------------------+
| id | select_type | table |...| rows | Extra
|
+----+-------------+-------+...+------+------------------------------+
| 1 | PRIMARY
| City |...|
6 | Using where; Using index
|
| 2 | SUBQUERY
| NULL |...| NULL | Select tables optimized away |
+----+-------------+-------+...+------+------------------------------+
A frequent question on mailing lists and IRC channels is how to retrieve counts for
several different values in the same column with just one query, to reduce the number
of queries required. For example, say you want to create a single query that counts how
many items have each of several colors. You can’t use an OR (e.g., SELECT COUNT(color
= 'blue' OR color = 'red') FROM items;), because that won’t separate the different
counts for the different colors. And you can’t put the colors in the WHERE clause (e.g.,
SELECT COUNT(*) FROM items WHERE color = 'blue' AND color = 'red';), because the
colors are mutually exclusive. Here is a query that solves this problem:16
mysql> SELECT SUM(IF(color = 'blue', 1, 0)) AS blue,SUM(IF(color = 'red', 1, 0))
-> AS red FROM items;
And here is another that’s equivalent, but instead of using SUM() uses COUNT() and en-
sures that the expressions won’t have values when the criteria are false:
mysql> SELECT COUNT(color = 'blue' OR NULL) AS blue, COUNT(color = 'red' OR NULL)
-> AS red FROM items;
相关推荐
优化器把使用 LIKE 操作符和一个没有通配符的表达式组成的检索表达式转换为一个"="操作符表达式。例如,优化器会把表达式 `ename LIKE 'SMITH'` 转换为 `ename = 'SMITH'`。优化器只能转换涉及到可变长数据类型的...
在数据库环境中,一个简单的低效SQL查询就足以让整个数据库系统陷入瘫痪状态。 #### 二、数据库性能瓶颈分析 数据库性能问题通常可以从硬件和软件两个层面进行排查: - **硬件层面**包括内存、硬盘、CPU以及网络...
减少数据访问,返回更少数据,减少交互次数,减少服务器CPU开销,利用更多资源。注意:这个是对《sql性能优化分享》的后期修改与补充。下载这个最新的就下载老的了。别下载重复了!!!
总之,不管是对于Oracle还是MySQL,SQL优化都是一个涉及多个层面和细节处理的过程。了解每个系统的内部机制以及优化策略,结合实际的数据库使用情况,可以帮助DBA在不同的数据库环境下,有效地实现SQL优化目标。
综上所述,SQL优化是一个综合性的过程,涉及到多个层面的技术和策略。通过对SQL语句的设计进行细致的规划和调整,可以显著提高数据库查询的性能和效率。在实践中,应不断积累经验,灵活运用各种技巧,以达到最佳的...
一个好的 SQL 语句应该尽量简单、模块化、易读、易维护、节省资源、少排序、不造成死锁等。 SQL 共享原理是 Oracle的一个功能,它可以大大地提高 SQL 的执行性能并节省了内存的使用。通过对 SQL 共享原理的理解,...
SQL 命令优化小窍门 SQL 优化是数据库性能优化的关键部分,好的 SQL 命令优化可以大大提高查询速度和数据库性能。在 SQL 命令优化中,索引的建立和使用非常关键。本文总结了一些常用的 SQL 命令优化小窍门,旨在...
如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)。 8. 删除重复记录 最高效的删除重复记录方法(因为使用了 ROWID)。例子:DELETE FROM EMP E WHERE E.ROWID > (SELECT...
示例中,通过一个简单的循环结构,向`over_com`表中插入了100万条记录,展示了PL/SQL在处理大数据批量操作时的强大能力。 #### 三、Autotrace:索引性能验证利器 接下来,文章深入探讨了`Autotrace`功能在评估和...
- **建议**: 将表空间文件分布在不同的磁盘上,并确保最后一个文件能够自动扩展。 **4. Innodb Log File Size** - **定义**: 设置redo log文件的大小。 - **应用场景**: 太大的redo log文件会导致恢复时间过长,而...
- 如果有多个简单的查询语句,可以尝试将它们合并为一个查询。这样做可以减少网络传输和数据库处理的开销。 8. **删除重复记录** - 使用ROWID可以有效地删除重复记录,ROWID是一种特殊的标识符,可以快速定位到...
### SQL优化公开课1知识点详解 #### 一、SQL优化概览 - **课程目标**:本课程旨在通过详细的案例研究、最佳实践以及丰富的Oracle新特性调整...当然,SQL优化是一个复杂的过程,还需要结合具体的业务场景进行综合考量。
7. **整合简单无关联的数据库访问**:将独立的简单查询合并到一个查询中,利用单次数据库访问获取多个结果。 8. **高效删除重复记录**:使用ROWID进行删除,例如通过子查询找到最小ROWID保留一条记录,其他重复记录...
大量优化实战方法:将主要SQL优化点一一剖析,分享大量SQL优化的实际工作经验 50余改写调优案例:覆盖大多数DBA日常工作场景,具有相当大的实用价值 技巧+案例:可以作为DBA的参考手册,也可以作为开发人员编写SQL...
7. **整合简单无关联的数据库访问**:即使没有关联,也可以通过子查询或JOIN操作将多个简单查询合并为一个,减少数据库交互。 8. **删除重复记录**:使用ROWID进行删除操作可以高效地去除重复记录,因为它避免了...
Oracle性能管理是一个持续的过程,包括主动和被动两个方面。主动性能管理强调在系统设计和开发阶段就考虑高性能架构,并定期监控以预防问题。被动性能管理则是在问题出现后进行的故障排除和优化。 优化是对系统组件...
综上,Oracle SQL性能优化是一个涉及广泛领域的复杂过程,要求开发人员具备深厚的数据库理论知识和实践经验。通过深入理解SQL处理过程、优化器工作原理以及执行计划分析,可以有效地提高SQL执行效率,进而提升整个...
### SQL优化要点详解 #### 一、SQL性能问题的原因及解决方法 SQL性能问题是数据库管理中常见的挑战之一,它直接影响到系统的响应时间和整体性能。理解SQL性能问题的原因及其解决方法对于提升系统的运行效率至关...
- 将多个INSERT语句合并为一个,减少与数据库交互的次数。 - 使用事务管理来进一步提高效率。 ### 7. 数据库事务管理 - **场景**:在执行复杂的业务逻辑时,合理使用事务管理可以提高数据处理的安全性和一致性。...