我记得我曾经读过这个。是否真的更快地列出所有需要的列而不是简单地使用*
,即使需要所有列?
谢谢, Martti Laine
答案 0 :(得分:2)
我从未见过,当结果完全相同时,从未见过关于select column-list vs. select *的辩论是关于查询的性能。
问题应该始终是,在表单之间做出决定时,哪个更易于维护,答案取决于打开查询的使用。
答案 1 :(得分:1)
这取决于。如果您只选择3列,而表格有100列。比它更快。
如果您仍然选择所有列,那么它只是一个不同的符号。
答案 2 :(得分:1)
只要您使用表格中的所有字段,使用*
和列出所有字段之间就没有明显的性能差异。
当您以某种方式更改表格布局时会出现差异。如果您添加另一个字段,使用*
的查询也将自动开始返回该字段,尽管它不会被使用。这会增加开销,并且当记录中的数据变得大于用于获取记录的缓冲区时,可能会使代码失败。
同样列出字段意味着它们按指定的顺序返回。如果更改表中字段的顺序,则使用*
的查询也将更改返回字段的顺序,这可能会导致代码出现问题。例如,必须按返回的顺序检索blob字段(例如文本),否则将丢弃这些值。
答案 3 :(得分:0)
使得它可能更快的一件事是,当你给出字段时,你也会给出订单。否则我需要通过字符串来恢复字段,或者首先获得原始字段。我根本不知道“fieldX”是第一个还是第10个字段。
这可能会导致更复杂的代码,或者大量减速(如果在循环中有字符串查找)。
答案 4 :(得分:0)
当您选择的列全部通过索引可用时,会出现真正的性能差异。在这种情况下,MySQL(和其他几个DBMS)将执行“仅索引选择”,这可能比从表本身执行基于索引的选择更快批次。
此外,通过线路发送不需要的数据的开销当然也会减慢检索速度。
最后只是选择所需数据的良好编码习惯。