假设我有一个包含多列的表。选择所有列或只是列的子集之间是否存在速度差异,如下所示?
SELECT * FROM Table WHERE colX = "value"
SELECT col1, col2, col3 FROM Table WHERE colX = "value"
答案 0 :(得分:2)
除非您需要所有列,否则不应选择所有列。相反,您应该只需为每个所需的列输入tablename.columname来选择所需的那些。
答案 1 :(得分:1)
从原始表中,实际查询本身将花费相同的时间。但是,返回结果会有所不同。而且,对于这样一个简单的查询,这可能会占据主导地位。
如果表包含非常大的列,则记录将跨越多个页面(“溢出”页面),然后可能存在性能差异。我不认为所有溢出页面都会立即读入内存。因此,仅显式引用不的列的子集包括大列可能更快。如何在MySQL中处理这个问题也可能取决于所使用的文件系统。
但是,如果“表格”真的是一个视图,那么它可能会产生很大的影响。此外,一些数据库支持计算/计算列。如果存在这些,那么这可能会对性能产生影响。
此外,一些数据库是“列”导向的,其中列实际上是分开存储的。在这样的数据库中,这些查询版本之间的性能可能会有很大差异。