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优化的“道”。 #### 4. 解决SQL问题的具体技术 - **体系结构**:了解数据库的整体架构对于优化至关重要。 - **...
在数据库环境中,一个简单的低效SQL查询就足以让整个数据库系统陷入瘫痪状态。 #### 二、数据库性能瓶颈分析 数据库性能问题通常可以从硬件和软件两个层面进行排查: - **硬件层面**包括内存、硬盘、CPU以及网络...
减少数据访问,返回更少数据,减少交互次数,减少服务器CPU开销,利用更多资源。注意:这个是对《sql性能优化分享》的后期修改与补充。下载这个最新的就下载老的了。别下载重复了!!!
然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要“愁”就一个字,心碎无数次了。 缘何有性能问题?原因也一字概括:“量”。当系统数据量、并发访问量上去后,不良SQL就会拖跨整个系统,...
, 然而,SQL虽然实现简单可乐,却极易引发性能问题,那时广大SQL使用人员可要“愁”就一个字,心碎无数次了。, 缘何有性能问题?原因也一字概括:“量”。当系统数据量、并发访问量上去后,不良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保留一条记录,其他重复记录...
7. **整合简单无关联的数据库访问**:即使没有关联,也可以通过子查询或JOIN操作将多个简单查询合并为一个,减少数据库交互。 8. **删除重复记录**:使用ROWID进行删除操作可以高效地去除重复记录,因为它避免了...
大量优化实战方法:将主要SQL优化点一一剖析,分享大量SQL优化的实际工作经验 50余改写调优案例:覆盖大多数DBA日常工作场景,具有相当大的实用价值 技巧+案例:可以作为DBA的参考手册,也可以作为开发人员编写SQL...
Oracle性能管理是一个持续的过程,包括主动和被动两个方面。主动性能管理强调在系统设计和开发阶段就考虑高性能架构,并定期监控以预防问题。被动性能管理则是在问题出现后进行的故障排除和优化。 优化是对系统组件...