设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1387|回复: 4
打印 上一主题 下一主题

[查询] 比较两种sql查询的效率,关注索引的进来瞅瞅

[复制链接]
跳转到指定楼层
1#
发表于 2003-11-14 18:32:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
嘻嘻,这几天正在上数据库DBMS的课
老师讲到两种查询的优劣,刚好自己编写的时候也遇到

还是以树结构的表为例:
id,idparent,sname           节点ID,父节点ID,节点名

要求查出树高为1,2的所有节点

[em01]SQl查询1:
select * from 树表
where IDparent is NULL  or  IDparent in (select * from 树表 where IDparent is NULL )

[em01]SQl查询2:
select * from 树表 where IDparent is NULL
union
SELECT 树表_1.*
FROM 树表 LEFT JOIN 树表 AS 树表_1 ON 树表.id = 树表_1.idparent
WHERE (((树表.idparent) Is Null))

嘻嘻,[em11][em11]

记住一定要在id,idparent上建索引
大大提高效率
基于上面两种查询高手讨论讨论啊


[此贴子已经被作者于2003-11-14 13:10:21编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2003-11-14 18:46:00 | 只看该作者
union  select 我用过稳定性太差不好用,上面两个查询1速度更快些
3#
 楼主| 发表于 2003-11-14 19:25:00 | 只看该作者
这几天听了关于数据库的索引组织
这才认识到索引的重要,以前仅仅只是作为一个概念或者设置参数而已

查询数据库效率主要体现在减少 I/O操作
即读写数据库是将相关数据从外存放入内存计算
因为数据库是存放在硬盘上,作为外存读写速度很慢
如果多次在硬盘上进行查询当然速度很慢
而[索引]就是能帮助找到满足条件的记录的关键字的辅助数据结构
也就是一样大小的索引文件,能够存放比数据库中多条记录
举个例子
在一个班查询 学号为"30" 的学生,假设班里共有40个学生
环境:一个学生记录大小占1K

不建索引:
对表的每一条记录进行遍历,需要读写数据库40次(忽略其他操作)

建立索引:
一个索引文件1K肯定可以存放多个学生,因为它只保存关键字,那么假设一个索引里面存放10个学生
那么查询只需要读写索引文件4次,然后找到索引文件中学号为30的地址指针,指向数据库后再把记录再读一次
哈哈,一共也就需要5次

上面只是简单的查询,本身基于减少数据库读写次数就已经非常可观,如果基于多关键字的索引的多表查询,效率更可观啦

嘻嘻,结合上面的思路,有兴趣的可以再看看上面的查询哪个效率高哦~!!
4#
发表于 2003-11-14 23:41:00 | 只看该作者
羡慕你呀兔子,还有课上,我们原来的数据库老师不备课,更要命的是他的数据库知识还不如我(俺不是自夸呀,老师他不负责任)
5#
 楼主| 发表于 2003-11-14 23:59:00 | 只看该作者
嘻嘻,工作之后再去学习就特别珍惜机会啦
现在听课就尽可能和实际经验结合起来融会贯通,不像以前读书的时候生吞活剥或者死记硬背啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-22 20:35 , Processed in 0.095818 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表