`
henghengdh
  • 浏览: 157484 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sql数据查询优化

 
阅读更多
1 对查询进行优化时,尽量避免全表扫描,首先应考虑在where及order by涉及的列上对立索引.
2 应该尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表的扫描。如:select id from t where num is null 可以在num上设置默认值0,确保表中num列中没有null值,然后这样查询:select id from where num=0.
3 应尽量避免在where子句中使用!=或者<>操作符,否则将引擎放弃使用索引而进行全表扫描.
4 应尽量避免在where子句中使用or来连接投机倒把,否则将导致引擎放弃使用索引进行全表扫描。如:select id from t where num=10 or num=20 可以这样写:select id from t where num=10 union all select id form t where num=20.
5 in 和 not in 也要慎用,有order by 的情况不走索引会导致全表扫描。如select id from t where num in (1,2,3),对于连续的数值,能用between就不要用in了,如:select id from t where num between 1 and 3.
6 下面的查询也会导致全表扫描:select id from t where name like '%abc%',若要提高效率,可以考虑全文检索。
7 如果在where子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择,然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下语句将进行全表扫描:select id from t where num = @num 可以修改为强制索引:select id from t with (index(索引名)) where num =@num.
8 应尽量避免在where子句中对字段进行表达式操作,这将导致引擎放弃索引而进行全表扫描。如:select id from t where num/2=100 应为:select id from t where num = 100 * 2.
9 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃索引而进行全表扫描。如:select id from t where substring(name,1,3)='abc' 修改为:select id from t where name like 'abc%'       select id from t where datediff(day,createdate,'2005-11-30')=0 修改为 select id from t where createdate >='2005-11-30' and createdate<'2005-12-1'
10 不要在where 子句中的'='左边进行函数,算术运算或其它表达式运算,否则系统将可能无法正确使用索引。
11 在使用索引字段作为条件时,如果该索引是复合索引,那必须使用到该索引中的第一个字段作为条件时才能保证系统使用索引,否则该索引将不会被使用,并且尽可能让字段顺序与索引顺序一致。
12 不要写一些没有意义的查询,如需要生成一个空表结构:select c1,c2 into #tt from t where 1=0 这类代码不会返回任何结果集,但会消耗资源的 就这样:create table #tt()
13 很多时候用exists代替in是一个好的选择,select num from a where num in (select num from b) 修改为:select num from a where exists (select 1 from b where num = a.num).
14 并不是所有索引对查询都有效,SQL是根据表的数据来进行优化的,当索引列有大量的数据重复时,SQL查询可能就不去利用索引.
15 索引并不是越多越好,索引固然可以提高相应的select的效率,但同时也降低了insert及update的效率,因为insert或update时有可以会重建索引,所有怎么样建索引需要慎重,一个表最好不超过六个
16 应尽可能的避免更新clusered索引数据列,因为clustered索引数据列的顺序是表记录的物理存储顺序,一旦该值改变将导致整个表的记录顺序调整,会耗费相当大的资源.
17 尽量使用数字字段,若只含有数值  尽量设置不要设计为字符类型,字符串比较耗时。
18 尽量使用varcher/nvarchar代替char/nchar.
19 任何地方都不要使用select * from t ,用具体字段代替
20 尽量使用变量代替临时表.
21 避免频繁创建和删除临时表,以减少系统表资源的消耗。
22 临时表并不是不可以使用,对于重复索引大型表 最好使用导出表
23 在新建临时表时,如果一次性插入的数据量太大,可以使用select into 代替create table,避免大量Log,以提高速度.
24  如果使用临时表 ,在存储过程最后必须删除,先truncate table 然后drop table,避免长时间锁表。
25  尽量避免使用游标,数据超1万条 ,考虑改写其它方式。
分享到:
评论

相关推荐

    Sql Server查询优化

    - 优化查询语句:编写高效的SQL查询语句,合理利用JOIN语句以及减少不必要的表连接操作。 - 避免死锁:设计事务时要考虑事务的顺序,尽量缩短事务执行时间,并避免长时间锁住资源。 - 减少游标的使用:在可能的...

    sql数据查询系统

    在构建“sql数据查询系统”时,我们主要关注的是如何利用ASP(Active Server Pages)脚本语言与SQL(Structured Query Language)相结合,实现一个高效、易用的网络数据查询平台。这个系统对于需要在线访问数据库并...

    sql查询优化 查询优化

    1. 合理使用常量优化查询: 在编写SQL语句时,应尽量避免将字段置于复杂的表达式中,因为这可能阻碍数据库优化器进行有效的优化。例如,`select * from teachers where salary/12=2000`不如`select * from teachers...

    SQL优化 SQL优化软件 SQL优化工具

    SQL优化软件和工具能够帮助数据库管理员(DBA)和开发人员找出性能瓶颈,优化查询逻辑,从而提高数据库系统的响应速度。在Oracle数据库环境下,这类工具尤为重要,因为Oracle数据库系统支持复杂的SQL操作,并且在大...

    sql查询优化(提高MySQL数据库查询效率的几个技巧)

    * 优化 SQL 语句:使用 EXPLAIN 语句来分析 SQL 语句的执行计划,优化查询语句。 * 使用存储过程:使用存储过程可以将频繁查询的操作封装起来,提高查询效率。 * 优化数据库结构:优化数据库结构,例如,使用合适的...

    ORACLE中SQL查询优化技术

    ### ORACLE中SQL查询优化技术 #### 一、引言 在现代企业级数据库应用中,Oracle数据库因其高性能、高可靠性和丰富的功能被广泛采用。然而,在实际的应用场景下,即使是设计良好的数据库系统也可能因为查询效率低下...

    SQL语言查询优化方案探究

    综上所述,通过综合运用减少I/O访问、优化CPU计算频度以及合理控制内存使用等策略,可以显著提升SQL查询效率,为信息系统提供更快捷、高效的数据处理能力。在实际应用中,开发者应根据具体情况灵活调整优化方案,以...

    SQL查询思路优化与语句优化.pdf

    三个关系模式为stud、class和sc,需要优化查询语句来提高查询速度。创建索引可以提高查询速度,避免表扫描和I/O开销。 本文还讨论了SQL查询思路优化的方法,包括使用EXISTS和IN代替子查询、使用索引、避免使用...

    优化sql查询速度

    - **使用动态 SQL**:虽然动态 SQL 在安全性方面存在一定的风险,但在某些特定场景下,动态 SQL 能够提供更灵活的查询方式,从而达到优化查询速度的目的。 - **事务处理**:合理使用事务处理机制可以有效减少数据的...

    海量数据优化查询SQL

    首先,合理使用索引是优化查询的关键。索引是一种特殊的数据结构,可以加速数据的查找过程。应该在经常用于连接、排序、分组以及条件过滤的列上创建索引。例如,对于连接操作频繁但未定义为外键的列,创建索引有助于...

    sql大数据量查询的优化技巧

    SQL查询优化是数据库管理的关键环节,特别是在处理大数据量时,优化查询性能至关重要。以下是对标题和描述中提及的SQL优化技巧的详细说明: 1. **建立索引**:索引可以显著提高查询速度,尤其是在WHERE子句和ORDER ...

    SQL Server查询优化器原理与优化.pdf

    SQL Server查询优化器还借助统计信息来估计数据的分布情况,从而更好地优化查询计划。 综上所述,SQL Server查询优化器的原理与优化是一个系统性的工程,涉及语句规范化、索引使用、连接查询和存储过程等多个方面。...

    SQL_Server_2008查询性能优化

    优化查询计划是提高性能的关键。使用`EXPLAIN PLAN`或`SET SHOWPLAN_ALL ON`可以查看查询计划,帮助我们分析查询的运行方式,找出可能的瓶颈。 索引是提升查询速度的重要工具。在设计数据库时,合理创建和维护索引...

    informix数据库sql查询优化

    - **访问数据架构**:理解数据库的数据存储方式是优化查询的基础。例如,在Informix中,数据被组织成不同的表空间(tablespace),每个表空间包含一系列数据页。 - **谓词**:谓词是在WHERE子句中用于过滤结果集的...

    从统计数据表记录总数谈SQL Server查询优化.pdf

    本文将围绕统计数据表记录总数与SQL Server查询优化之间的关系展开讨论,意在为数据库管理者提供一种参考,以便他们能够更有效地优化查询性能。 首先,我们需要明确何为统计数据。在SQL Server数据库中,统计数据是...

    VB中SQL语言查询优化设计.pdf

    VB中SQL语言查询优化设计 SQL语言是数据库管理系统中最重要的组成部分之一,它提供了对数据库的访问、管理和维护功能。VB开发工具中,SQL语言查询优化设计是非常重要的,能够提高数据库的访问效率和性能。本文将从...

    Effective MySQL之SQL语句最优化.pdf

    4. SQL语句优化相关原理:优化原理包括但不限于查询语句的分析、索引的使用、表结构的合理设计、数据的存储方式、事务的管理、锁机制等。 5. 查询语句的分析:分析SQL语句是为了找出可能影响性能的部分,如慢查询。...

    mysql数据库sql优化

    通过合理的SQL优化,可以显著提高数据处理速度,降低服务器负载,提升用户体验。 ##### 1.1 优化实战 #### 策略1:尽量全值匹配 全值匹配是指在查询时尽可能地使用索引列的所有部分。例如,在表`staffs`中,创建...

    sql server 语句优化

    - **优化查询提示**:通过使用查询提示来控制查询优化器的行为,如`OPTION (RECOMPILE)`可以避免参数嗅探问题。 #### 四、结语 SQL Server查询优化是一个涉及多方面因素的综合过程,需要结合具体的应用场景和技术...

Global site tag (gtag.js) - Google Analytics