优化数字数据库的SQL语句

时间:2013-12-11 22:39:04

标签: sql sql-server

我有超过一百万个号码的列表。我需要将数字放在一个表中按数字排序,另一个按原样,引用已排序数字的ID,表格结构如下:

sortedNumbers

Id | SortedNumber
1    01356
2    45789

编号

Id | Number | SortedNumberId
1    35601    1
2    94578    2
3    97548    2

目前,我首先填充已排序的数字表,然后填写标准数字表,并执行select语句以获取已排序的数字Id。所有这些select语句都让它变慢了,有没有办法在一个语句中完成所有操作,从不使用select语句来获取已排序数字的Id?

循环的每次迭代的当前查询,sortedNumber是通过对代码

中的数字进行排序来生成的

循环1

query = "INSERT into SortedNumbers VALUES (" + SortedNumber + ")";

循环2

query = "SELECT Id FROM SortedNumbers WHERE SortedNumber = " + sortedNumber;
query = "INSERT into Numbers VALUES (" + Number + ", " + SortedId + ")";

2 个答案:

答案 0 :(得分:1)

首先,您不要将已排序的数字放入数据库中。您将数字放入表中,然后按照您想要的任何排序条件查询表排序。

SELECT number from table ORDER BY number

但我希望我已经错过了你要做的任何事情。你能发一些例子吗?

答案 1 :(得分:1)

您可以将两个插入包装到Transaction中,并通过调用SCOPE_IDENTITY()从sortedNumbers表中获取ID值。这假设sortedNumbers表中的ID列是Identity列:

BEGIN TRANSACTION
    INSERT sortedNumbers (SortedNumber) VALUES (sortednumbervalue)
    INSERT Numbers (Number, SortedNumberId) VALUES (numbervalue, SCOPE_IDENTITY())
COMMIT