首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

表查询,该怎么处理

2012-12-22 
表查询表A中有一列x(int)表B中有两列y(int),z(int) 现在想查出yx and xz 的 表A 表B中所以的信息[最优

表查询
表A中有一列x(int)
表B中有两列y(int),z(int) 现在想查出y<=x and x<=z 的 表A 表B中所以的信息
[最优解释]
看了一下执行计划,如果不加聚集索引,那么63%时间用于排序,你试试我这个语句。

CREATE CLUSTERED INDEX PK_area ON B (area1 )
CREATE NONCLUSTERED INDEX N_area ON B(startip,endip)
CREATE NONCLUSTERED INDEX N_IP ON A(ipx)
SELECT area1,COUNT(a.ipx) 
FROM B b , a a 
WHERE  a.ipx BETWEEN b.startip AND b.endip
GROUP BY area1

[其他解释]
看你业务需求,如果你的省市统计要求很细,那么B表的数据无法减少,比如去掉什么地级市这类,那只能靠8楼这种建索引的方式了。
A表要看你每天登陆信息有多少了,如果每天几百条,那么一个月也就几万条,无所谓。你可以每月创建一张新表,只保留一个月的记录,统计哪个月就去连接对应的月度表。如果每天登陆信息非常多,那么分区是一种选择方式。
另外还要看你的统计方式,如果你只要统计当天的,可以自动作业每天半夜将A表中数据转移至历史表。
最后还可以搞一个数据集市出来,使用SSIS来获取每天新的数据,然后更新维度表和事实表,使用SSAS来管理这个数据集市,使用SSRS做成你需要的统计报表。
[其他解释]
select *
from A left join B on A.主键=B.主键
where x>=y and z>=z


如果你没有主键的话就会造成笛卡儿积
[其他解释]
select * from a,b where y<=x and x<=z

[其他解释]
select A,*,b.*
from A,B 
where b.y<=a.x and a.x<=b.z
[其他解释]
x(int)
表B中有两列y(int),z(int) 现在想查出y<=x and x<=z 的 表A 表B中所以的信息

select * from a join b on y<=x and x<=z
[其他解释]
数据在A表是一个接收用户登陆IP地址x=IPadress,B表是IP地址区域表(包括省市)y=startIP,z=endIP,
B表中几十万条数据,而且A表每天的数据量也很大,就是想统计每天各省市的访问量,以上方面试了,查询太慢了。各位有什么好的方法
[其他解释]
你如果没有主键关联,他们的方法都是笛卡儿积,就是几十万乘以A表总数,好几十个亿都不止。
幻想不出你的表,试试:
select b.省市,count(a.主键)
from b left join a on a.x between b.y and b.z 
group by b.省市

[其他解释]
A表:
TimeLogindatetime
TimeLogoutdatetime
IPvarchar(15)    1.0.32.0
ipxnumeric(18, 0) 16785409 IP转换为数据后

B表:                      值
startipnumeric(18, 0) 16785408(1.0.32.0)
endipnumeric(18, 0) 16793599(1.0.63.255)
area1nvarchar(50)   广东省

[其他解释]
引用:
看了一下执行计划,如果不加聚集索引,那么63%时间用于排序,你试试我这个语句。

SQL code

CREATE CLUSTERED INDEX PK_area ON B (area1 )
CREATE NONCLUSTERED INDEX N_area ON B(startip,endip)
CREATE NONCLUSTERED INDEX N_IP ON A(ipx)
SEL……


这个方法快了很多。但是我的A表中现在就几百条数据,如果A表数据上万条是不是有很大的问题。有没有其它更好的方法。比如重新创建一个IP与地址的表。每天把一天的IP与访问地址放进去,然后对这张表进行统计。
[其他解释]
2005以后,可以考虑按省来分区,甚至安市来分区,这样搜索范围进一步减少


[其他解释]

引用:
2005以后,可以考虑按省来分区,甚至安市来分区,这样搜索范围进一步减少


如何操作,能说详细点吗?
[其他解释]
分区这个东西不好说,你去找找联机丛书吧。
[其他解释]
今天有人提醒我说我6楼的说法错了,想想也对,就你这题,没必要用外联,用内联就可以了,我8楼的写法就是内联。
[其他解释]
引用:
今天有人提醒我说我6楼的说法错了,想想也对,就你这题,没必要用外联,用内联就可以了,我8楼的写法就是内联。


8楼的方法我试了,运行确实快了很多。但是数据量大的时候,还是慢。主要是B表里的数据有四十几万条
[其他解释]
那要看执行计划,看开销是在哪部分

热点排行