Enzo Damato Asked: 2024-09-10 07:46:40 +0800 CST2024-09-10 07:46:40 +0800 CST 2024-09-10 07:46:40 +0800 CST 在“select * where col=x”中,其中 x 是不可排序的、非索引的列,数据库是否会比平面文件具有任何性能提升? 772 如果我正在查询数据库以选择具有VARCHAR()与查询参数相同的字段的所有记录。对平面文件“数据库”进行逐行线性搜索是否有速度优势?如果有,这种加速是如何实现的? query-performance 1 个回答 Voted Best Answer Phill W. 2024-09-10T14:31:40+08:002024-09-10T14:31:40+08:00 由于您使用的是 varchar 数据,因此文件中每个字段的位置定义不明确。“解析”文件的每一行以找到要过滤的字段会产生开销。 在数据库表中,每个字段的位置定义明确,因此可以更快地找到每个值。 低级文件 I/O 也可能更快,因为表将以 [更大] [数据库] 块的形式从磁盘读取。 逐行读取文件通常会更慢。 对同一张表的后续查询可能会更快,因为文件 I/O 可能会被完全消除,数据库块将被缓存在数据库内的内存缓冲区中。过滤现在全部在内存中完成。 从文件中读取将始终……嗯……从文件中读取,这将比内存中的活动慢。 数据库允许多个进程同时读取(甚至写入)同一张表。在文件级别处理此类争用非常复杂。
由于您使用的是 varchar 数据,因此文件中每个字段的位置定义不明确。“解析”文件的每一行以找到要过滤的字段会产生开销。
在数据库表中,每个字段的位置定义明确,因此可以更快地找到每个值。
低级文件 I/O 也可能更快,因为表将以 [更大] [数据库] 块的形式从磁盘读取。
逐行读取文件通常会更慢。
对同一张表的后续查询可能会更快,因为文件 I/O 可能会被完全消除,数据库块将被缓存在数据库内的内存缓冲区中。过滤现在全部在内存中完成。
从文件中读取将始终……嗯……从文件中读取,这将比内存中的活动慢。
数据库允许多个进程同时读取(甚至写入)同一张表。在文件级别处理此类争用非常复杂。