Oracle数据库查询十个小技巧(三)

作者&投稿:闫颜 (若有异议请与网页底部的电邮联系)

   第八个技巧 慎用Like等通配符

  Like关键字 从技术上来说 是一个非常友善的通配符 利用这个通配符 我们可以实现很多模糊查询 如现在在一个人事档案系统中 用户想知道身份证号码以 开头的人事信息 此时 就可以利用Like语句实现 我们可以利用下面的条件语句 实现我们的需求 where 身份证号码 like % 通过这个条件语句 可以查到所有身份证以 开头的号码

  但是 当用户在一张大表中采用这个LIKE语句的话 就会发现这个查询语句的运行效率非常的慢 这是什么原因造成的呢?其实 不管是Like 关键字 若采用MATCHES关键字的话 若在大量数据中查找符合条件的记录 则其运行效率也比较低 这主要是其技术特性所造成的

  Like与Matches两个关键字 其支持通配符匹配 在有些专业书籍上把这个叫做 正规表达式 不过由于在利用这些关键字查询的时候 数据库系统不是通过索引来查询 而是采用顺序扫描的方式来查询 显然 真是这种技术特性 造成了Like与Mateches两个关键字查询效率的低下 特别是在复杂查询或者大表查询中 用户可以明显感觉到速度比较慢

  索引是数据库中的一个重要的数据结构 索引如果利用的合理的话 可以大幅度的提升数据库的查询性能 一般情况下 我们在数据库设计的时候 要充分的利用索引 来提高数据库的运行效率 如对于一些经常需要用到的查询功能 我们需要为没有指定外键的列建立索引;如有查询大表数据 而且又需根据好几个字段的值对其进行排序 也需要在这些列上建立复合索引 特别是在一些应用系统上 往往可以按以下字段的名称 就会对这个字段进行排序 遇到这种情况的话 更加需要在这些频繁进行排序的列上建立索引 以提高重新排序的效率 可见 若在查询的时候 若不能利用索引提高查询效率的话 则就好像跑车失去四轮驱动 速度会大受影响

  所以 在数据库系统设计中 要尽量避免采用Like或者Matche关键字 有时候 我们可以利用其他运算符号来代替 如我们可以利用〉(大于)或者<(小于)符号来达到类似的需求 若真的要采用这两个关键字的话 则就需要做好查询优化方面的工作 如不要在基础表中直接利用这个两个关键字 而是通过报表视图 或者临时表等来查询 以减少其不良影响

   第九个技巧 利用注释提高查询语句的可读性

  在数据库设计中 有一个非常奇怪的现象 一些专家级的数据库设计人员 在写查询语句的时候 非对语句进行详细的注释 有时会 注释的内容大大超过了查询代码本身的篇幅 可是 往往一些入门不久的数据库设计人员 不喜欢写注释语句 这是一个很反常的现象

  笔者刚开始接触数据库的时候 也不喜欢写注释语句 觉得写注释语句太浪费时间 但是 一个偶然的事件让笔者改掉了这个坏习惯 那时笔者在观摩一个专家设计数据库的时候 被其密密麻麻的注释惊呆了 看了其代码之后 笔者可以非常轻松的阅读完其所有的代码 不愧为是专家级的人物 看了他的注释之后 在看看自己编写的代码注视 那真是大巫见小巫了 从此之后 笔者也在慢慢培养自己编写代码的习惯 现在笔者在数据库设计的时候 注释已经写的很详细了 至少笔者的同事在看到我的注释之后 不用看源代码就知道笔者要实现的目的了

  在编写注释的时候 要注意几个问题

  一是注释越详细越好 其实 注释最多牺牲一点磁盘空间 而不会对数据库的性能产生任何不良的影响 相反 注释详细的话 对于后续数据库维护与管理 系统二次开发的等等 都会提供很大的帮助

  二是最好采用英文注释 若采用中文注释的话 有时候数据库语言设置不当 在数据库实例安装的时候 不会把中文的注释带过去 所以 作为数据库管理员 要有一定的英语基础 学会利用英语写注释 其实 这也不是很难 只要多看看别人设计的数据库注释 把他们常用的注释复制下来 通过选择合适的进行复制 粘贴就可以完成任务

  三是不仅在写查询语句的时候 要做好代码的注释工作 在编写其他代码的时候 如过程 函数等等 也要添加详细的代码 以增加这些复杂功能的可读性

  四是注释的内容 一般注释应该包含如下几方面的内容 一是这段代码要实现的功能;二是这段代码需要调用的参数;三是这段代码输出的结果 若是多表关联查询的话 最好能够说明表之间的对应关系 若在查询语句中 直接调用了函数的话 则最好能够注明这个函数的功能;等等 终止一个原则就是 让其他人看到这个注释 不再需要去查询其他的资料 就可以明白这段代码的含义

  详细的注释内容 不仅不会降低数据库的运行性能 而且还可以提高数据库的管理与维护的效率;同时也可以加快前台应用程序开发设计的速度 又因为查询语句是系统中利用的最多的语句 也是引用的最频繁的语句 故在查询语句中 更加需要做好相关的注释

   第十个技巧 必要的时候 限制用户所使用的行

  在使用一些大型管理系统的时候 如ERP系统 我们若查询产品信息 默认的情况下 若记录比较多的时候 其不会把所有的记录都查询出来 如在ERP系统的数据库中 其有 个产品信息 而端子类的产品信息就占据到 个 此时 我们在查询条件中 若产品类别限制为 端子 的话 则其查询出来的结果也可能不是所有的端子 默认显示的话 可能只有前面的 个端子类产品 若用户需要看到全部的产品信息 就需要点击 显示全部 按钮 才可以显示出全部的信息

  其实 不管是一些应用程序如此设计 在Oracle数据库中 本身也有这方面的限制 如直接在PL/SQL客户端中查询数据的话 其显示的记录默认情况下也是有限制的 而不会把所有符合条件的语句查询出来 若用户需要查询所有符合条件的记录 则需要点击 继续 按钮 以让数据库显示所有的记录

  为什么要做类似的限制呢?这主要就是为了提高数据库查询的性能 我们直接在数据库服务器上 在几百万条记录中查询的话 显示几百条记录跟现实几千条记录所花费的时间明显不同 前者可能只需要 秒即可 而后者可能需要 分钟 所以 为了减少用户等待的时间 我们往往需要限制首次查询默认显示的记录数字

  如我们往往在查询语句中 利用top 来让数据库只显示前 条记录 如此的话 可以明显的缩短用户的等待时间 默认情况下 是根据记录创建的时间顺序 来显示记录的 最迟创建的记录 其显示在最前 以此类推

lishixinzhi/Article/program/Oracle/201311/16756



~

5个高效EXCEL数据分析小技巧!
答:5. TRIM()这是一个简单方便的函数,可以被用于清洗具有前缀或后缀的文本内容。通常,当你将数据库中的数据进行转储时,这些正在处理的文本数据将会保留字符串内部作为词与词之间分隔的空格。并且,如果你对这些内容不进行处理,后面的分析中将产生很多麻烦。关于5个高效EXCEL数据分析小技巧,该如何下手的内...

SQL、MySQL、Oracle随机查询语句?
答:1、Oracle查询结果集,随机排序 select * from tableName order by dbms_random.value();2、MySQL随机查询,随机排序 SELECT * FROM tableName ORDER BY rand()3、SQL随机查询,随机排序 SELECT * FROM tableName ORDER BY NEWID()4、Oracle随机查询20条 select * from( select * from ta...

数据库如何查询
答:联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可...

怎么用linux命令连接racle数据库(linux如何连接数据库)
答:1、登录到Linux后,就可以在命令窗口直接对Linux进行操作了。先将用户切换到Oracle。当显示为[oracle@db~]$时,说明切换成功。命令:su-oracle;2、切换到Oracle用户之后,我们登录到到sqlplus,使用dba权限登录到sqlplus。在sqlplus中,我们使用conn连接一下我们具体想要操作的数据库用户。命令:connusername...

怎样諳racle数据库SQL性能的稳定性
答:1、1、ORACLE数据库在线数据字典,ORACLE在线数据字典能够反映出ORACLE动态运行情况,对于调整数据库性能是很有帮助的。 2、2、操作系统工具,例如UNIX操作系统的vmstat,iostat等命令可以查看到系统系统级内存和硬盘I/O的使用情况,这些工具对于管理员弄清出系统瓶颈出现在什么地方有时候很有用。 3、3、SQL语言跟踪工具(...

提高MySQL数据库查询效率有哪些技巧?
答:3.消除对大型表行数据的顺序存取 在嵌套查询中,对表的顺序存取对查询效率可能产生致命的影响。比如采用顺序存取策略,一个嵌套3层的查询,如果每层都查询1000行,那么这个查询就要查询10亿行数据。避免这种情况的主要方法就是对连接的列进行索引。例如,两个表:学生表(学号、姓名、年龄……)和选课表...

我的程序,查询数据库很慢。请问怎么提高查询速度
答:· 技巧一:问题类型:ACCESS数据库字段中含有日文片假名或其它不明字符时查询会提示内存溢出。解决方法:修改查询语句sql="select * from tablename where column like '%"&word&"%'"改为sql="select * from tablename"rs.filter = " column like '%"&word&"%'"===技巧二:问题类型:如何用简易的办法实现类...

oracle 如何删除一行数据
答:方法1、sql:deletefrom数据库.表名whereid='1'讲解:如果不用跨库,可以省略“数据库”。1代表唯一的一条记录,是参数。如果省略where,则删除所有记录,如果指定where,则删除指定满足条件的记录。方法2、PL/SQLDev的话有个简单的方法:首先,用select...forupdate语句查出结果,然后,开锁,用和...

Oracle数据库基础的目录
答:7 小结2.8 复习题第3章 创建数据库3.1 创建数据库前的准备3.2 使用DBCA创建数据库3.3 手动创建数据库3.4 数据库服务器初始化参数文件3.4.1 服务器参数文件概述3.4.2 创建服务器初始化参数文件3.4.3 修改服务器参数文件中的参数3.4.4 导出服务器初始化参数文件3.4.5 查看初始...

oracle 索引什么时候重建和重建方法讨论
答:每次索引访问的读取数:是指利用索引读取一数据行时所需要的逻辑I/O操作数,逻辑读取不必是物理读取,因为索引的许多内容已经保存在数据缓冲区,然而,任何数据大于10的索引都需要重建。1. B-tree(B树)索引 是现代关系型数据库中最常用的索引。除了存储索引数据外,还存储一个行ID,用来指出该行其余...