Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化数字数据库的SQL语句_Sql_Sql Server - Fatal编程技术网

优化数字数据库的SQL语句

优化数字数据库的SQL语句,sql,sql-server,Sql,Sql Server,我有一个超过一百万个数字的列表。我需要将数字放在一个数字排序的表中,另一个是,参考排序数字的ID,该表的结构如下: 分类号码 Id | SortedNumber 1 01356 2 45789 数字 Id | Number | SortedNumberId 1 35601 1 2 94578 2 3 97548 2 目前,我正在先填充排序数字表,然后填充标准数字表,并执行select语句以获取排序数字Id。但是,所有这些select语句都使其速

我有一个超过一百万个数字的列表。我需要将数字放在一个数字排序的表中,另一个是,参考排序数字的ID,该表的结构如下:

分类号码

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 + ")";

首先,你不需要将排序后的数字放入数据库。将数字放入表中,然后根据所需的排序条件查询表顺序

SELECT number from table ORDER BY number

但我想无论你想做什么,我都没有抓住重点。您可以发布一些示例吗?

您可以将两个插入内容包装到一个事务中,并通过调用SCOPE\u IDENTITY从sortedNumbers表中获取ID值。假设SortedNumber表中的ID列是标识列:

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

听起来这与SQL查询的关系不大,而与表上缺少索引的关系更大。是的,但如果没有查询,谁知道呢?询问代码的问题必须表明对正在解决的问题的最低理解。包括尝试的解决方案,以及它们不起作用的原因。这很好,但如果在循环的后面,一个数字与前面插入的数字具有相同的排序值,该怎么办?