日期:2014-05-17  浏览次数:20421 次

想通过建视图提升查询效率的困惑
点表
主键 点ID X Y 坐标系 转换关系
1    AAA  1 1  XXX    YYY


一个点,有X Y 坐标系 转换关系……属性,如果两个点的这些属性完全一样,就判定为同一个点,就应该有相同的点ID。
每次插入一个新点,就要和数据库里所有的点比对,这样效率有点低。
完全可以和一个"点ID"的点,只比对一次,因为这些有相同点ID的点有相同的坐标属性。

我想建个视图

select X, Y, 坐标系, 转换关系 group by X, Y, 坐标系, 转换关系

这样新插入的点只需要和视图里的每条记录比较一次就行了,但据说视图只是逻辑概念,没有实际存储,所以每次调用视图,仍然是先执行一个查询的SQL,效率不会提升。有没有什么好办法呢?
------最佳解决方案--------------------
select 点ID from tb group by 点ID

这样更快
------其他解决方案--------------------
打开SQL SERVER 2005管理器,登陆后,打开你的数据库
然后依次选择你要建立索引的表,点开'+'会出现列  索引等字段
在索引上面单击右键选择新建索引就可以了.
------其他解决方案--------------------
--建表
CREATE TABLE [dbo].NodTb1(
[主键] [bigint] IDENTITY(1,1) NOT NULL,
[点ID] [varchar](10) NOT NULL,
[X] bigint NOT NULL,
[Y] bigint NOT NULL,
坐标系 varchar(10),
转换关系 varchar(10) 

--插入数据
DECLARE @max AS INT, @rc AS INT;
SET @max = 5000;
SET @rc = 1;
insert into NodTb1([点ID], [X], [Y], 坐标系, 转换关系)
select 'AAA'+cast (@rc as varchar(10)),@rc,2*@rc,'A-B'+cast (@rc as varchar(10)),'2D' +cast (@rc as varchar(10)) 
while @rc * 2 <= @max
begin
insert into NodTb1([点ID], [X], [Y], 坐标系, 转换关系)
select 'AAA'+cast (@rc as varchar(10)),[X] + @rc,[Y] + 2*@rc, 'A-B' +cast (@rc as varchar(10)),'2D' +cast (@rc as varchar(10)) from NodTb1
  SET @rc = @rc * 2;
end
--创建索引
create index idx_A on [dbo].NodTb1(X,Y,坐标系,转换关系)
--查询示例
select [点ID] from NodTb1 where X = 4080 and Y = 8160 and 坐标系 ='A-B2048' and 转换关系 = '2D2048' 
/*
点ID
----------
AAA2048

(1 行受影响)

*/

------其他解决方案--------------------
可以考虑用索引
------其他解决方案--------------------
XY建索引,数字2分法对半对半的找,可比一条一条的找快多了。
------其他解决方案--------------------
建索引是在SQL Server里点修改表,在某一列上点右键吧,

我看有几个选项"索引/键"、"全文索引"、"XML索引",用哪个呢?

引用:
可以考虑用索引

------其他解决方案--------------------

--插入新点
declare @ID varchar(10)
select top(1)@ID = [点ID] from NodTb1 where X = 4080 and Y = 8160 and 坐标系 ='A-B2048' and 转换关系 = '2D2048' 
if @ID is not null
insert into NodTb([点ID], [X], [Y], 坐标系, 转换关系)
select @ID,4080,8160,'A-B2048', '2D2048' 
else
insert into NodTb([点ID], [X], [Y], 坐标系, 转换关系)
select '新ID',4080,8160,'A-B2048', '2D2048'  

------其他解决方案--------------------