1

I have two tables in two schemas - schema1 and schema2. Both the tables have the same design, except that Schema2 has a clustered index on the primary key of the tables.

Schema1 tables don't have primary key (That's how the old design was and I've to revamp it with a new schema design which is schema2)

In schema 2, COL_1 is the primary key for table1 and (COL_4, COL_12 ) are keys for table2 which are indexed.

Table1 (col_1, col_2, col_3, col_4 ... col_10) Table2(col_1,col_4,col_12, .... col_20)

I have a query which retrieves data from table1, and is as follows

SELECT t1.COL_1,t1.COL_2, t1.COL_3, t1.COL_4,t1.COL_5 
FROM table1 t1
LEFT JOIN table2 t2 ON
     t2.COL_1 = t1.COL_1,
     AND t2.COL_4 = t1.COL_4
WHERE 
     t1.col_10 = '/some string/'

When I run this query in both the schemas, I get the number of rows retrieved same. But the order of the rows are not the same and I don't know how to compare the data in both.

My questions.

  1. Can I assume that both the results in the two schemas match, just 'coz the rowcount match ?
  2. Do the results differ if since there is index in the tables in schema2 ?

I would like to have an understanding of the above behaviour.

Thanks in advance.

4

3 回答 3

1

但是行的顺序不一样,我不知道如何比较两者中的数据

当然。您添加了一个聚集索引 - 这意味着索引表是根据索引排序的。但是没有ORDER BY子句,就没有定义的顺序。

我不知道如何比较两者中的数据

使用该ORDER BY子句根据需要对数据进行排序。这将允许比较。

您发布的查询应该以与您的连接条件相同的顺序返回相应的行 on COL_1,所以不太确定问题的原因。

于 2013-08-07T17:08:12.240 回答
0

表 1/模式 1 是一个堆表,您插入一条添加到该表末尾的记录。当您查询该表时,记录(但不计算)以它们插入的相同顺序返回。

表 2/模式 2 是一个聚集索引表,即当您在该表中插入一条记录时,如果需要,它会插入到记录之间(或者如果新记录的主键大于所有其他现有的主键,则附加)。当您查询该表时,记录按主键的排序顺序返回(但不计入其中)。

如果您想比较这两个表并确定它们完全相同,您可以这样做(准备好如果它是一个巨大的表将需要一段时间)。

-- show all records in table1 that do not exist in table2
select * from table1
except
select * from table2

反之亦然

-- show all records in table2 that do not exist in table1
select * from table2
except
select * from table1

如果这两个查询没有返回记录,则表是相同的。如果您有允许不同的“更新/创建”列或标识列,则列出您希望在所有查询中比较的列。

于 2013-08-07T17:19:23.987 回答
0

返回的顺序不一样,因为您没有ORDER BY子句。没有一个,返回行的顺序是实现定义的,你不应该做任何假设。

索引虽然可能提高查询的性能,但不应该因为它的存在而导致返回不同的结果。

至于仅仅因为行数匹配而假设结果相同,我认为您正在为自己找麻烦。

于 2013-08-07T17:08:25.150 回答