本文摘自 中国it实验室 http://oracle.chinaitlab.com/optimize/14378.html
1、对查询语句进行优化的理由
下列几方面的原因是我们进行SQL语句优化的理由:
◆ SQL语句是对数据库(数据)进行*作的惟一途径;
◆ SQL语句消耗了70%~90%的数据库资源;
◆ SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低;
◆ SQL语句可以有不同的写法;
◆ SQL语句易学,难精通。
从大多数数据库应用系统的实例来看,查询*作在各种数据库*作中所占据的比重最大,而查询*作所基于的SELECT语句在SQL语句中又是代价最大的语句。
(1)、合理使用索引:where子句中变量顺序应与索引字键顺序相同。
如:create index test_idx on test(hm, rq, xx)
索引字键顺序:首先是号码hm,其次是日期rq,最后是标志xx,所以where子句变量顺序应是where hm<=“P1234”and rq=“06/06/1999”and xx=“DDD”,不应是where xx=“DDD” and rq=“06/06/1999” and hm <=“P1234”这样的不按索引字键顺序写法。
(2)、将最具有限制性的条件放在前面,大值在前,小值在后。
如:where colA<=10000 AND colA>=1 效率高
where colA>=1 AND colA<=10000 效率低
(3)、避免采用MATCHES和LIKE通配符匹配查询
通配符匹配查询特别耗费时间。即使在条件字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。
例如语句:SELECT * FROM customer WHERE zipcode MATCHES “524*”
可以考虑将它改为SELECT * FROM customer WHERE ZipCode<=“524999” AND ZipCode >=“524000”,则在执行查询时就会利用索引来查询,显然会大大提高速度。
(4)、避免非开始的子串
例如语句:SELECT * FROM customer WHERE zipcode[2,3] >“24”,在where子句中采用了非开始子串,因而这个语句也不会使用索引。
(5)、避免相关子查询
一个字段的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的字段值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。
例如:将下面的语句
select hm,rq from TabA
where item IN (select item form TabB where TabB.num=50)
改为:select hm,bf from TabA, TabB
where TabA.item=TabB.item AND TabB.num=50
(6)、避免或简化排序
应当简化或避免对大型表进行重复的排序。当能够利用索引自动以适当的次序产生输出时,优化器就避免了排序的步骤。以下是一些影响因素:
◆ 索引中不包括一个或几个待排序的字段;
◆ group by或order by子句中字段的次序与索引的次序不一样;
◆ 排序的字段来自不同的表。
为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,但相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的字段的范围等。
(7)、消除对大型表行数据的顺序存取
在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。避免这种情况的主要方法就是对连接的字段进行索引。例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在“学号”这个连接字段上建立索引。
还可以使用并集来避免顺序存取。尽管在所有的检查列上都有索引,但某些形式的where子句强迫优化器使用顺序存取。下面的查询将强迫对orders表执行顺序*作:
SELECT * FROM orders WHERE (cust_num=126 AND order_num>1001) OR order_num=1008
虽然在cust_num和order_num上建有索引,但是在上面的语句中优化器还是使用顺序存取路径扫描整个表。因为这个语句要检索的是分离的行的集合,所以应该改为如下语句:
SELECT * FROM orders WHERE cust_num=126 AND order_num>1001
UNION
SELECT * FROM orders WHERE order_num=1008
这样就能利用索引路径处理查询。
(8)、对于大数据量的求和应避免使用单一的sum命令处理,可采用group by方式与其结合,有时其效率可提高几倍甚至百倍。
(9)、避免会引起磁盘读写的rowid*作。在where子句中或select语句中,用rowid要产生磁盘读写,是一个物理过程,会影响性能。
(10)、使用临时表加速查询
把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序*作,而且在其他方面还能简化优化器的工作。
但要注意:临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下,注意不要丢失数据。
分享到:
相关推荐
在现代网页设计中,select下拉列表是实现用户交互的一项基本元素,但在不同的浏览器中,其样式表现差异较大,且在自定义样式方面存在限制,尤其是无法完全通过CSS控制其外观。随着Web标准的推进,浏览器厂商对HTML...
【SQL SELECT 语句性能优化】在数据库管理中,高效的SELECT查询对于系统性能至关重要。当涉及的数据表数量庞大时,不恰当的查询方式可能导致全表扫描,极大地影响系统响应速度。以下是一些针对SELECT语句优化的关键...
- **语法**:`SELECT 小区ID, 调整后PCI FROM 小区PCI优化调整结果表 WHERE 小区ID IN (SELECT 优化小区ID FROM 优化小区/保护带小区表 WHERE 小区类型 = '优化区');` #### 6.2 比较测试 – “SOME”子句 - **...
4. TXSQL 的功能优化:包括异步删除大表优化和 select 优化等多种优化技术。 TXSQL 的发展之路包括 TXSQL 5.1、TXSQL 5.5、TXSQL 5.6 和 TXSQL 8.0 等版本,每个版本都带来了新的功能和性能优化。TXSQL 5.1 版本...
优化SELECT语句对于提升数据库性能至关重要。以下是一些关键的优化策略: 1. **创建和使用索引**:索引是加速查询的关键,特别是在大数据量的表中。没有索引,数据库需要全表扫描,效率极低。为经常被查询的列创建...
10. **优化性能**:在大型表单中,大量的CSS选择器和JavaScript操作可能会对页面性能产生影响。因此,在编写样式时,应尽量减少选择器的复杂度,避免不必要的计算和重绘。 通过以上步骤,我们可以实现一个美观且...
在MySQL数据库中,优化`DISTINCT`操作是一个关键的性能提升策略,特别是在处理大量数据时。上述场景中,用户遇到了一个问题:对一个10G以上的单表`user_access_xx_xx`执行`SELECT COUNT(DISTINCT nick)`以统计唯一...
在网页设计中,为了提升用户体验,常常需要对...记住,实践是检验真理的唯一标准,所以动手尝试并不断优化你的代码,才能真正掌握这一技能。希望这个教程能帮助你理解并实现js select框美化,让你的网页设计更加出色。
在网页开发中,选择框(Select)是常见的一种交互元素,用于用户进行多项选择。"select多选与美化"这个主题关注的是如何在HTML的下拉列表中实现多选功能,并且兼容各种主流浏览器,包括Firefox、Opera、Chrome、...
《使用Select2优化HTML Select元素的交互体验》 在网页开发中,`<select>`元素是常见的下拉选择框,但其默认样式和功能相对简陋。为了提升用户体验,开发者通常会选择使用第三方库来增强这一组件,其中Select2是一...
在网页开发中,`select`下拉框是常见的用户交互元素,用于提供一系列选项供用户选择。然而,随着用户体验需求的提升,单纯的下拉选择已无法满足所有场景,特别是当选项众多时。为了提高用户的操作效率,我们常常需要...
修改、优化核心代码 时间:2010-01-28 4. beta 0.1.3 版 支持 select单选 优化部分代码 时间:2010-01-29 5. beta 0.1.4 版 修改核心代码 时间:2010-01-31 6. beta 0.1.5 版 支持radio/checkbox 默认值选项 修改...
五、性能优化 在处理大量数据时,应考虑使用虚拟滚动或延迟加载,以减少初始页面加载时间和内存占用。例如,Select2支持从远程数据源动态加载选项。 六、无障碍性 确保你的`select`组件对辅助技术友好,遵循WCAG...
随着版本迭代,`Select2`不断优化性能和增加新功能。目前最新稳定版为4.1.0-beta.1,需注意不同版本可能存在的API变更和兼容性问题。在使用时,请确保与所依赖的`jQuery`版本相匹配,同时考虑对不同浏览器的支持。 ...
2. **触屏友好**:考虑到移动端用户的操作习惯,Ansel Select优化了触摸交互,确保在小屏幕上也能轻松选择和滚动选项。 3. **搜索功能**:内置的搜索功能允许用户在长列表中快速找到目标选项,提升了用户查找效率。...
1. **优化的下拉选择器**:Select2将传统的`<select>`元素转换为更美观、易用的组件,提供了优雅的触摸支持,使得在各种设备上都能有良好的交互体验。 2. **单选与多选**:Select2支持单选和多选模式,用户可以根据...
版权:zhang yang soft ... 浏览器支持:IE、Firefox、Opera , 谷歌浏览器 版本说明: 1. beta 0.1.0 版 支持input text/button 美化 时间:2010-01-25 ... 支持 select 优化部分代码 时间:2010-01-29
《XM-SELECT:一款高效实用的多选下拉框插件》 在Web开发中,Select组件是不可或缺的一部分,尤其在处理多选场景时,它的便捷性和灵活性显得尤为...在实践中不断探索和优化,XM-SELECT无疑能成为我们手中的一把利器。
7. **交互优化**:为了提供更好的用户体验,可能需要进一步调整和优化,比如处理搜索功能,使得用户可以搜索树中的节点。 通过以上步骤,我们就可以在Bootstrap环境下,利用Select2和ZTree创建一个下拉框带树结构的...
在网页开发中,jQuery是一个非常流行的JavaScript库,它简化了DOM操作、事件处理以及Ajax交互。在本示例中,我们将探讨如何使用jQuery实现“select”元素的...在理解基本原理后,可以根据具体项目需求进行扩展和优化。