Performance 从数据库表中选择行的最快方法(Microsoft SQL server)

Performance 从数据库表中选择行的最快方法(Microsoft SQL server),performance,sql-server-2008,select,Performance,Sql Server 2008,Select,我有一个巨大的表,其中有一个int主键标识列 我猜使用该主键进行SELECT查询是数据库查找表中的行的最快方法,不是吗 如果这是真的,我还有一个问题。 该查询的速度是否与按键调用字典的速度一样快,或者数据库仍然必须从开始(主键列)读取所有行,直到找到行本身 提前感谢^ ^我认为在字典中搜索按照字典搜索算法工作,它应该更像二进制搜索 当您将一列声明为表中的主键时,该列将被索引,因此它应该基于哈希原理工作,所以搜索肯定不是您提到的逐行搜索 最后,是的,这是一种常见且快速的方法,但您应该选择sql查询

我有一个巨大的表,其中有一个int主键标识列

我猜使用该主键进行SELECT查询是数据库查找表中的行的最快方法,不是吗

如果这是真的,我还有一个问题。 该查询的速度是否与按键调用字典的速度一样快,或者数据库仍然必须从开始(主键列)读取所有行,直到找到行本身


提前感谢^ ^

我认为在字典中搜索按照字典搜索算法工作,它应该更像二进制搜索

当您将一列声明为表中的主键时,该列将被索引,因此它应该基于哈希原理工作,所以搜索肯定不是您提到的逐行搜索


最后,是的,这是一种常见且快速的方法,但您应该选择sql查询中所需的列数和行数。避免每次select调用获取大量行。

我认为字典中的搜索按照字典搜索算法工作,字典搜索算法应该更像二进制搜索

当您将一列声明为表中的主键时,该列将被索引,因此它应该基于哈希原理工作,所以搜索肯定不是您提到的逐行搜索


最后,是的,这是一种常见且快速的方法,但您应该选择sql查询中所需的列数和行数。避免每次select调用获取大量行。

使用主键显然是访问特定行的最快方法

如果你想了解它是如何工作的,你必须了解索引是如何工作的

一般来说,它是这样工作的:

假设您有一个表
t1(col1,col2…col10)
,并且在
col1
上有一个索引。
col1
上的索引表示您有一些数据结构,其中包含对
(col1,rec\u id)
并且
rec\u id
允许使用适当的
col1
直接访问行。
数据结构是按
col1
排序的,因此允许通过
col1

高效搜索,使用主键显然是访问特定行的最快方式

如果你想了解它是如何工作的,你必须了解索引是如何工作的

一般来说,它是这样工作的:

假设您有一个表
t1(col1,col2…col10)
,并且在
col1
上有一个索引。
col1
上的索引表示您有一些数据结构,其中包含对
(col1,rec\u id)
并且
rec\u id
允许使用适当的
col1
直接访问行。
数据结构按
col1
排序,因此允许通过
col1

高效搜索SQL Server中的索引建立索引树-通过该索引树搜索非常快,绝对不是“查看所有记录”的方法。相反,即使对于数百万行,SQL Server的查询引擎也可能只会将5或6项数据与指定的
ID
值进行比较,以实际查找您要查找的行是自动创建的索引还是我必须对表声明做些什么?djdev间接回答了这一问题。因此,每当创建主键时,都会创建索引表。好的,SQL Server中的索引会构建一个索引树——搜索索引树非常快,绝对不是“查看所有记录”的方法。相反,即使对于数百万行,SQL Server的查询引擎也可能只会将5或6项数据与指定的
ID
值进行比较,以实际查找您要查找的行是自动创建的索引还是我必须对表声明做些什么?djdev间接回答了这一问题。因此,每当创建主键时,都会创建索引表。好的,我每次只需要一个电话。我的问题是避免创建dictionary类(我想最终还是会创建dictionary类),该类将存储用户最近选择的行,并在用户停止使用一段时间后将其从dictionary中删除。这些行的使用在短时间内是不必要的,因此即使数据库调用很快,本机dictionary类对于这种情况来说也是一种更好的方法,始终控制服务器中有足够的内存来存储字典。依我看,我每次只需要一个电话。我的问题是避免创建dictionary类(我想最终还是会创建dictionary类),该类将存储用户最近选择的行,并在用户停止使用一段时间后将其从dictionary中删除。这些行的使用在短时间内是不必要的,因此即使数据库调用很快,本机dictionary类对于这种情况来说也是一种更好的方法,始终控制服务器中有足够的内存来存储字典。国际海事组织。