试验一 空间查询语言

试验一 空间查询语言
华南国防医学杂志实验目的
    1.  了解数据库查询优化方法和查询计划的概念。
    2.  学会分析查询的代价,并通过建立索引或者修改SQL语句来降低查询代价。
试验要求:
        熟悉Oracle数据库的运行和维护技能,能熟练进行Oracle数据库的转储和恢复、能对数据库的安全性和完整性进行控制。
试验步骤:
   朝阳新增病例基因序列公布 考虑以下两种SQL操作,查看和分析效果。
查询优化可以考虑以下方法:
        1)单表查询,重点训练where子句的功能和语法
        2)建立表之间的参照关系,实现多表连接查询。
        3)建立索引,分析索引对查询优化的作用。
        4)重写SQL语句(即查询重写)分析功能相同的不同sql语句的查询过程和效率。
       
3.1  单表查询
 例如以下的查询:(可以自己写出查询语句,分析有索引和没有索引的区别)
LIKE关键字支持通配符匹配,技术上叫正规表达式。但这种匹配特别耗费时间。例如:
SELECT FROM customer WHERE zipcode LIKE 98_ _ _
即使在zipcode字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。如果把语句改为SELECT * FROM customer WHERE zipcode >“98000”,在执行查询时就会利用索
引来查询,显然会大大提高速度
3.2  连接查询
    普通的两表连接查询或多表连接查询,分析连接的顺序对查询计划的生成是否有影响?如果有,有何影响?
例如:
a 避免相关子查询
一个列的标签同时在主查询和where子句中的查询中出现,那么很可能当主查询中的列值改变之后,子查询必须重新查询一次。查询嵌套层次越多,效率越低,因此应当尽量避免子查询。如果子查询不可避免,那么要在子查询中过滤掉尽可能多的行。
b 使用临时表加速查询
把表的一个子集进行排序并创建临时表,有时能加速查询。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。例如:
SELECT cust.namercvbles.balance多项式展开……other columns
FROM custrcvbles
WHERE cust.customer_id = rcvlbes.customer_id
AND rcvblls.balance>0
沦陷区的女人
AND cust.postcode>98000
ORDER BY cust.name
如果这个查询要被执行多次而不止一次,可以把所有未付款的客户出来放在一个临时文件中,并按客户的名字进行排序:
CREATE TABLE cust_with_balance name CHAR(20) balance number;
Insert into cust_with_balance(name,医院合同管理系统 balance)
SELECT cust.namercvbles.balance……other columns
FROM custrcvbles
WHERE cust.customer_id = rcvlbes.customer_id 成都理工大学学报
AND rcvblls.balance>0
ORDER BY cust.name ;
然后以下面的方式在临时表中查询:
SELECT FROM cust_with_balance
WHERE postcode>98000
临时表中的行要比主表中的行少,而且物理顺序就是所要求的顺序,减少了磁盘I/O,所以查询工作量可以得到大幅减少。
注意:临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下,注意不要丢失数据。

本文发布于:2024-09-21 19:03:44,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/332358.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查询   分析   优化   顺序   语句   数据库
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议