30分帮助分析sql语句的时间复杂度

vividlife 2006-03-18 04:55:46
有一个数据表table,它的属性个数是n,记录个数是m。

那么下面两条select语句的时间复杂度怎么分析?
1、select sum(num) from
(
select power(count(*),2) as num from table
group by a,b,c
)
2、select sum(num) from
(
select count(*) as num from table
group by a,b,c
having count(distinct D)=1
)
...全文
427 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
撸大湿 2006-03-20
SET STATISTICS IO on
SET STATISTICS TIME on
到查询分析器里把这两个语句分别放在2个查询语句的前面

测试一下就知道了
回复
vividlife 2006-03-18
在网上发现了这个时间复杂度分析,不知道有没有道理.

SQL语句中的查询语句是:
select[ALL|DISTINCT]<目标列表达式>[,<目标列表达式>,...]
from<表名|视图名>[,<表名|视图名>,...]
[where<条件表达式1>[,<条件表达式2>,...]]
[groupby<列名>[having<条件表达式>]
[orderby<列名>]。 其执行原理如下:
按照Where语句中的条件表达式从数据源中找到符合条件的元组(记录),返回的是记录的集合,在返回记录的同时对select语句进行操作,如果有groupby语句,则按groupby语句中的 条件表达式对聚合函数进行分组操作。 所以其执行过程可理解如下:

While(where条件表达式满足)
{
语句1:从from指定的数据源中返回记录;
语句2:对语句1中返回的记录进行select操作;

语句3:if(存在groupby条件表达式p
{
语句1:按groupby条件表达式执行聚合函数;
}
}

1、对上文中生成#temp2,#temp3的过程其时间复杂度为0(n)。
2、形成主SQL语句的过程,在动态生成季度列的过程中,其时间复杂度为0(n)。
3、执行主SQL语句,其时间复杂度为0(n)。
回复
bugchen888 2006-03-18
数据库查询是不能分析时间复杂度的。

SQL语言是描述性语言,只需要告诉数据库要给你什么样的数据,而根本不需要知道有时也不太可能知道数据库是怎么实现的。
其他语言,像C,Java,都是过程语言,你去写每一条指令,写每一个循环,你可以控制它的时间复杂度。

而数据库的实现在时间复杂度上会有成熟的优化算法,比如排序(order by),分组统计(group by)和取不重复值(distinct)。
回复
huailairen 2006-03-18
使用事件探察器 看它们的执行时间就可以了。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-03-18 04:55
社区公告
暂无公告