这可能是一个愚蠢的问题,但我只想说清楚。如果每行中有大量数据,是否需要更长的时间来执行SQL查询?
例如,如果我喜欢将2000字节的数据存储为blob(我们称之为colum“Data”)在一行包含10 000行的表中(所有这些都与blob大小相似)数据的”) 。如果我只搜索一行的ID,那么是否需要更长的时间来处理搜索,例如服务器是否必须喜欢处理存储在它经过的每一行的每个列中的整个信息?
答案 0 :(得分:4)
这取决于您使用的引擎。
但是,大多数现代引擎都能够存储行中的长数据:需要在搜索中扫描的实际行表只存储指向长数据的实际块的指针。
此外,如果堆表中的id
上有索引,则索引将用于搜索。索引记录仅存储id
和记录指针的值。即使表是聚类的(记录本身按id
排序),然后B-Tree
搜索算法将用于查找您所追踪的记录,仅处理最终叶中的实际记录级别页面。
因此,最有可能的是,如果您搜索id,则不会扫描长数据。
如果您的数据存储在行中并且没有在您要搜索的表达式上定义索引,那么是的,引擎需要扫描更多的记录,如果它们很大则会更慢。
答案 1 :(得分:4)
通常,如果您的ID列是表中的主键(或者至少有一个索引),那么像
这样的简单查询SELECT ID,Data FROM Table WHERE ID = 1
无论数据列的大小,都会一样快
答案 2 :(得分:1)
如果每行中都有大量数据,是否需要更长时间才能执行SQL查询?
在纸面上,是的。磁盘页面读取包含较少的行,因此您需要更多IO来提取您正在寻找的行。
实际上,根据数据库存储内容的方式,开销很小。例如,PostgreSQL区分了可变长度数据的普通存储和扩展存储,例如冗长的varchar,text或bytea。
答案 3 :(得分:0)
通常,有两件事会决定您的查询速度:
对于单个记录,这应该是一个微小的开销;如果您需要检索大量数据,可能会更慢。
您的数据库引擎应该有关于BLOB性能的详细文档。