iis服务器助手广告
返回顶部
首页 > 资讯 > 数据库 >怎么避免SQL全表查询
  • 444
分享到

怎么避免SQL全表查询

2024-04-02 19:04:59 444人浏览 安东尼
摘要

本篇内容介绍了“怎么避免sql全表查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1、模糊查询效率很

本篇内容介绍了“怎么避免sql全表查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1、模糊查询效率很低:

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

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

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

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

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

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

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

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

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

  4、使用组合索引,如果查询条件中没有前导列,那么索引不起作用,会引起全表扫描;但是从oracle9i开始,引入了索引跳跃式扫描的特性,可以允许优化器使用组合索引,即便索引的前导列没有出现在WHERE子句中。例如:create index skip1 on emp5(job,empno);   全索引扫描 select count(*) from emp5 where empno=7900;   索引跳跃式扫描 select 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=&rsquo;manager&rsquo;and empno=&rsquo;10&rsquo; order by job,empno,date desc; 实际上只是查询出符合job=&rsquo;manager&rsquo;and empno=&rsquo;10&rsquo;条件的记录并按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=&lsquo;aaa&rsquo;,这样会导致每次执行时都会重新分析,浪费CPU和内存资源。

“怎么避免SQL全表查询”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: 怎么避免SQL全表查询

本文链接: https://www.lsjlt.com/news/59090.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么避免SQL全表查询
    本篇内容介绍了“怎么避免SQL全表查询”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 1、模糊查询效率很...
    99+
    2024-04-02
  • oracle怎么避免全表扫描
    创建索引:通过在查询条件中使用索引字段,可以帮助Oracle优化查询计划,避免全表扫描。 编写高效的SQL语句:避免使用通配...
    99+
    2024-04-09
    oracle
  • 参数化查询为什么能避免sql注入
    参数化查询能避免sql注入的原因是采用了预编译方法,先将SQL语句中可被客户端控制的参数集进行编译,生成对应的临时变量集,再使用对应的设置方法,为临时变量集的元素进行赋值,赋值函数为setString(),这样会对传入的参数进行强制类型检查...
    99+
    2024-04-02
  • 如何避免全表扫描的sql优化
    这期内容当中小编将会给大家带来有关如何避免全表扫描的sql优化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。对查询进行优化,应尽量避免全表扫描,首先应考虑在wher...
    99+
    2024-04-02
  • mongodb避免的查询模式
    1少用countdb.testcol1.find({xxx:15}).count() 2 避免large-skipdb.testcol1.find({xxx:15}).skip(100000).l...
    99+
    2024-04-02
  • sql三表关联查询怎么查
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-06-04
  • SQL怎么查询所有表名
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-21
  • sql怎么查询表的列名
    要查询表的列名,可以通过以下SQL语句来实现: SELECT column_name FROM user_tab_colum...
    99+
    2024-04-12
    sql
  • sql三表关联怎么查询
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-30
  • sql怎么查询表的结构
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-06-03
  • sql两表关联怎么避免重复记录
    在进行SQL两表关联时,可以通过使用DISTINCT关键字来避免重复记录。DISTINCT关键字可以在SELECT语句中用于返回唯一...
    99+
    2024-04-09
    sql
  • SQL联表查询
    表1学生信息表 表二专业信息表 – join on 连接查询 – where 等值查询 1、内连接 分为两种 等值连接: 查找两个表中连接字段相等的记录。 --查询每个学生的(学生表)学号、姓名、籍贯、年龄、(专业表)专业、...
    99+
    2023-08-19
    mysql
  • sql多表查询
    多表查询概念:从多张表查询数据 分类:连接查询和子查询。 有两张表A、B 连接查询: 内连接      相当于查询A、B交集数据 例1:select * from emp,dept where emp.dep_id=d...
    99+
    2023-09-01
    sql 数据库 vim mysql java
  • 如何避免表单sql注入
    避免表单sql注入的方法:将所有独立的单引号替换成双引号。删除用户输入内容中的所有连字符。限制表单或查询字符串输入的长度。检查用户输入的合法性,确信输入的内容只包含合法的数据。将用户登录名称、密码等数据加密保存。检查提取数据查询所返回的记录...
    99+
    2024-04-02
  • mysql怎么避免回表
    要避免回表的情况,可以考虑以下几个方面: 使用合适的索引:在关键列上创建索引,这样查询可以直接从索引中获取数据,而不需要回表查询...
    99+
    2023-10-28
    mysql
  • mysql怎么避免锁表
    mysql避免锁表的方法:保持事务的轻量,可减少对锁资源占用。尽量避免并发的执行涉及到修改数据的语句。避免使用子查询,尽量使用主键。编写应用程序过程中,让进程持有锁的时间缩短。...
    99+
    2024-04-02
  • SQL查询怎么给表起别名
    这篇“SQL查询怎么给表起别名”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SQL查询怎么...
    99+
    2024-04-02
  • sql怎么两个表关联查询
    在 SQL 中,我们可以使用 JOIN 关键字来两个表关联查询。例如,假设有两个表:table1 和 table2,并且它们之间有一个关联字段 field1。你可以使用如下的语句来两个表关联查询: SELECT * FROM t...
    99+
    2023-09-01
    sql 数据库 mysql
  • sql多表查询语句怎么写
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-30
  • sql怎么查询表是否存在
    在SQL中,可以使用以下查询语句来检查表是否存在: SELECT table_name FROM information_...
    99+
    2024-04-20
    sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作