在sql-query中用户“SELECT one,two,three”而不是“SELECT *”真的更快吗?

时间:2011-01-01 17:11:22

标签: mysql sql

我记得我曾经读过这个。是否真的更快地列出所有需要的列而不是简单地使用*,即使需要所有列?

谢谢, Martti Laine

5 个答案:

答案 0 :(得分:2)

我从未见过,当结果完全相同时,从未见过关于select column-list vs. select *的辩论是关于查询的性能。

问题应该始终是,在表单之间做出决定时,哪个更易于维护,答案取决于打开查询的使用。

答案 1 :(得分:1)

这取决于。如果您只选择3列,而表格有100列。比它更快。

如果您仍然选择所有列,那么它只是一个不同的符号。

答案 2 :(得分:1)

只要您使用表格中的所有字段,使用*和列出所有字段之间就没有明显的性能差异。

当您以某种方式更改表格布局时会出现差异。如果您添加另一个字段,使用*的查询也将自动开始返回该字段,尽管它不会被使用。这会增加开销,并且当记录中的数据变得大于用于获取记录的缓冲区时,可能会使代码失败。

同样列出字段意味着它们按指定的顺序返回。如果更改表中字段的顺序,则使用*的查询也将更改返回字段的顺序,这可能会导致代码出现问题。例如,必须按返回的顺序检索blob字段(例如文本),否则将丢弃这些值。

答案 3 :(得分:0)

使得它可能更快的一件事是,当你给出字段时,你也会给出订单。否则我需要通过字符串来恢复字段,或者首先获得原始字段。我根本不知道“fieldX”是第一个还是第10个字段。

这可能会导致更复杂的代码,或者大量减速(如果在循环中有字符串查找)。

答案 4 :(得分:0)

当您选择的列全部通过索引可用时,会出现真正的性能差异。在这种情况下,MySQL(和其他几个DBMS)将执行“仅索引选择”,这可能比从表本身执行基于索引的选择更快批次

此外,通过线路发送不需要的数据的开销当然也会减慢检索速度。

最后只是选择所需数据的良好编码习惯。