选择较少的 SQL 列会使请求更快吗?

nak*_*kwa 2 sql

我有一个 rails/backbone 单页应用程序处理大量 SQL 查询。

这是请求:

SELECT * FROM `posts` WHERE `thread_id` = 1
Run Code Online (Sandbox Code Playgroud)

比这个更快:

SELECT `id` FROM `posts` WHERE `thread_id` = 1
Run Code Online (Sandbox Code Playgroud)

选择未使用的列对查询执行时间的影响有多大?

Rem*_*anu 6

出于所有实际目的,在查找单行时,差异可以忽略不计。随着结果行数的增加,差异会变得越来越重要,但是只要你在 thread_id 上有一个索引并且你不超过表中所有行的 10-20%,这里仍然不是一个大事件。仅供参考,区分因素来自这样一个事实,即选择*将强制对每一行在主索引中进行额外的查找。仅id通过在 上查找二级索引即可满足选择thread_id

还有与任何大字段相关的明显成本,例如 BLOB 文档或大测试字段。如果posts字段具有测量数十 KB 的值,那么显然检索它们会增加额外的传输成本。

所有这些都假设一个正常的执行引擎,带有 B-Tree 或 ISAM 行模式存储。几乎所有的“表”和引擎都属于这一类。如果您谈论的是列式存储,那么差异将是显着的,因为列式存储仅读取感兴趣的列,而读取额外的列会影响更明显的此类存储引擎。

是否有索引thread_id将产生更加明显的影响。确保你拥有它。