`
fenglingxuewqk
  • 浏览: 83359 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

避免SQL全表查询

 
阅读更多

       1、模糊查询效率很低: 

  原因:like本身效率就比较低,应该尽量避免查询条件使用like;对于like ‘%...%’(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低;另外,由于匹配算法的关系,模糊查询的字段长度越大,模糊查询效率越低。 

  解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like ‘…%’,是会使用索引的;左模糊like 

  ‘%...’无法直接使用索引,但可以利用reverse + function index 的形式,变化成 like ‘…%’;全模糊是无法优化的,一定要的话考虑用搜索引擎。出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询。 

       2、查询条件中含有is null的select语句执行慢 

  原因:Oracle 9i中,查询字段is null时单索引失效,引起全表扫描。 

  解决方法:SQL语法中使用NULL会有很多麻烦,最好索引列都是NOT NULL的;对于is null,可以建立组合索引,nvl(字段,0),对表和索引analyse后,is null查询时可以重新启用索引查找,但是效率还不是值得肯定;is not null 时永远不会使用索引。一般数据量大的表不要用is null查询。 

       3、查询条件中使用了不等于操作符(<>、!=)的select语句执行慢 

  原因:SQL中,不等于操作符会限制索引,引起全表扫描,即使比较的字段上有索引 

  解决方法:通过把不等于操作符改成or,可以使用索引,避免全表扫描。例如,把column<>’aaa’,改成column<’aaa’ or column>’aaa’,就可以使用索引了。 

  4、使用组合索引,如果查询条件中没有前导列,那么索引不起作用,会引起全表扫描;但是从Oracle9i开始,引入了索引跳跃式扫描的特性,可以允许优化器使用组合索引,即便索引的前导列没有出现在WHERE子句中。例如:create index skip1 on emp5(job,empno);   全索引扫描 select count(*) from emp5 where empno=7900;   索引跳跃式扫描 select /*+ index(emp5 skip1)*/ count(*) from emp5 where empno=7900; 前一种是全表扫描,后一种则会使用组合索引。 

  5、or语句使用不当会引起全表扫描 

  原因:where子句中比较的两个条件,一个有索引,一个没索引,使用or则会引起全表扫描。例如:where A=:1 or B=:2,A上有索引,B上没索引,则比较B=:2时会重新开始全表扫描。 

  6、组合索引,排序时应按照组合索引中各列的顺序进行排序,即使索引中只有一个列是要排序的,否则排序性能会比较差。例如:create index skip1 on emp5(job,empno,date);  select job,empno from emp5 where job=’manager’and empno=’10’ order by job,empno,date desc; 实际上只是查询出符合job=’manager’and empno=’10’条件的记录并按date降序排列,但是写成order by date desc性能较差。 

  7、Update 语句,如果只更改1、2个字段,不要Update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志。 

  8、对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。 

  9、select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。 

  10、sql的where条件要绑定变量,比如where column=:1,不要写成where column=‘aaa’,这样会导致每次执行时都会重新分析,浪费CPU和内存资源。

分享到:
评论

相关推荐

    U8 BOM全阶查询 sql

    #### 三、SQL实现全阶BOM查询 ##### 3.1 数据表结构分析 本案例涉及的主要数据表及其关系如下: - `bom_bom`:BOM表,存储产品与BOM的关系; - `bom_opcomponent`:操作组件表,存储组件与BOM的关系; - `bas_...

    SQL多表连接查询优化的相关研究

    标题中的“SQL多表连接查询优化的相关研究”指的是在数据库管理中,如何高效地执行涉及多个数据表的SQL查询操作。在SQL(Structured Query Language)中,连接查询(JOIN)是用于合并两个或更多表中的数据的关键技术...

    sql优化 联表查询

    5. **使用EXPLAIN分析**:通过执行EXPLAIN分析SQL语句,可以了解数据库如何执行查询,包括哪些索引被使用,哪些步骤可能导致全表扫描等,这有助于找出性能瓶颈并进行优化。 6. **优化数据模型**:适当的数据模型...

    SqlServer表结构转oracle表结构

    关键类可能包括数据库连接类、SQL查询类以及表结构迁移类等。 7. **注意事项**:转换过程中需要注意兼容性问题,如SQL Server特有的特性(如clr存储过程)在Oracle中可能不支持。此外,数据迁移不仅仅是结构的迁移...

    sql查询优化 查询优化

    例如,将特定条件下的子集数据放入临时表,可以避免每次查询时的筛选和排序过程。 4. 应用存储过程优化查询: 存储过程是由预编译的SQL语句和数据库编程语言组成的,它们在服务器上存储并可以被多次调用。使用存储...

    SQL_Server_2008查询性能优化

    当SQL Server必须检查表中的每一行来满足查询条件时,性能会显著下降。通过使用索引、WHERE子句的适当条件以及避免在JOIN操作中使用NOT IN或OR等低效运算符,可以减少全表扫描的发生。 在编写查询时,考虑使用参数...

    java语言的分页查询功能(mysql和sql server)

    1. 避免全表扫描:在分页查询时,应尽量利用索引进行排序,避免全表扫描,提升查询效率。 2. 使用ROW_NUMBER()优化:在SQL Server中,使用`ROW_NUMBER()`结合子查询可以避免`OFFSET`的性能问题,尤其是在大数据量时...

    SQLPrompt查询分析界面提示功能

    例如,它会显示查询的执行计划,帮助用户理解数据是如何从表中提取的,这有助于优化查询性能,避免全表扫描等低效操作。 智能提示功能是SQLPrompt的另一大亮点。当用户在编写SQL时,工具会根据上下文提供相关的列名...

    学习小组作业——SQL单表简单练习2

    在本资源"学习小组作业——SQL单表简单练习2"中,主要涵盖了SQL语言的基础知识,特别是关于单表查询的技巧。SQL(Structured Query Language),即结构化查询语言,是用于管理和处理关系数据库的标准语言。这里我们...

    VB判断SQL表是否存在

    接下来,我们可以使用SQL查询语句`IF EXISTS`来检查表是否存在。例如,如果我们想要检查名为"Employee"的表,可以编写如下代码: ```vb Dim rs As New ADODB.Recordset Dim sqlQuery As String sqlQuery = "IF ...

    SQL结构化查询语言速学宝典(带完整原创目录)

    - **避免全表扫描**:尽量使用索引覆盖查询,减少全表扫描带来的性能损耗。 #### 六、实战案例分析 - **案例1:电商订单系统数据分析**: - 利用JOIN操作联合订单表和商品表,统计不同商品类别的销售情况。 - **...

    sql2000查询分析器

    4. 查询性能优化:通过调整索引、避免全表扫描、减少临时表使用等方式提升查询速度。 5. 使用视图和存储过程:创建视图简化复杂查询,存储过程封装常用操作,提高代码可读性和执行效率。 四、结合“sqlkit2000”...

    将sql查询结果保存到数据表

    ### 将SQL查询结果保存到数据表的知识点 在日常的数据库管理与开发工作中,经常需要将一个SQL查询的结果保存到另一个数据表中。这种方式不仅可以提高数据处理的效率,还能帮助我们更好地组织和管理数据。根据给定的...

    sql中文查询手册

    2. 避免全表扫描:通过优化查询条件和使用索引减少扫描的记录数。 3. 减少JOIN操作:尽量避免大表之间的JOIN,优化JOIN条件和顺序。 4. 存储过程:封装复杂的操作,减少网络传输,提高执行效率。 七、安全性 SQL还...

    查询本表 查询本表 查询本表

    例如,你可以使用以下基本语法来查询表中的所有记录: ```sql SELECT * FROM 表名; ``` 这里的`*`代表选择所有列,`表名`是你想要查询的表的名称。如果你想选择特定列,可以将`*`替换为列名,如: ```sql SELECT ...

    SQLServer中复杂sql语句查询

    这包括使用EXPLAIN PLAN分析查询执行计划,调整索引策略,避免全表扫描,合理使用子查询和临时表,以及优化联接条件等。通过这些方法,可以将查询时间降低到小于0.1秒。 综上所述,掌握SQL Server中的复杂SQL语句...

    sqlserver查询分析器 win10可用

    8. **安全性**:在使用查询分析器时,应遵守最佳安全实践,如避免在代码中硬编码敏感信息,使用参数化查询防止SQL注入攻击,定期更改登录凭据,以及限制用户权限以最小化潜在风险。 9. **性能优化**:对于复杂的...

    SQLServer查询耗费大量资源的语句.txt

    - **分区表**:对于大型表,可以采用分区技术来提高查询性能。 - **并发控制**:优化锁机制,避免长时间锁定,减少等待时间。 #### 2.2 性能监控工具 - **SQL Server Profiler**:用于跟踪SQL Server事件,帮助分析...

    SQL Server数据库查询优化相关论文及资料

    - **避免全表扫描**:利用索引来定位数据,避免全表扫描。 4. **存储过程与参数化查询**: - 存储过程可以预编译,提高执行速度,减少网络传输。 - 参数化查询可以防止SQL注入,同时优化查询性能。 5. **资源...

    SQL查询语言及应用

    3. **查询优化**:编写高效查询语句,避免不必要的全表扫描。 4. **事务管理**:正确使用事务来保证数据的一致性和可靠性。 5. **安全性**:实施适当的权限管理和数据加密措施,保护敏感信息。 #### 六、总结 SQL...

Global site tag (gtag.js) - Google Analytics