mysql - 这是真的吗 : "In MySQL, fetching a column value forces a read of the entire row"?

标签 mysql database-performance query-performance

我刚刚在 session 发言人幻灯片中读到了这个声明,来自一个似乎知道自己在说什么的人:

In MySQL, fetching a column value forces a read of the entire row [so aggressivly fetching contents there makes sense].

所以我的问题是:这是否意味着在多列数据库表查询中以下查询的成本完全相同?我这么问是因为这几乎涵盖了我以前听说过的有关 MySQL 的所有内容。

查询 1:

SELECT id FROM mytable WHERE flag = 1;

查询 2:

SELECT * FROM mytable WHERE flag = 1;

最佳答案

我想这是不正确的。我清楚地记得我的毕业老师告诉我们一些案例,例如,由于使用“SELECT *...”而不是“SELECT id...”,某个应用程序的性能非常糟糕。

也许您可以尝试制作一个真实的示例,以两种方式在一系列 SQL 查询之前和之后运行时间戳并比较其结果。

编辑:使用 SELECT * FROM tableSELECT id FROM table 在 SQL Fiddle ( http://sqlfiddle.com/#!2/32954/2 ) 上尝试一个简单的架构,对于 95 行,“*”的平均时间约为 10 毫秒,对于相同的 95 行,“id”的平均时间为 1 毫秒。我不知道 SQL Fiddle 是否是一个值得信赖的来源,但我认为它可以给我们一个想法。

关于mysql - 这是真的吗 : "In MySQL, fetching a column value forces a read of the entire row"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18131196/

相关文章:

如果记录的 id 和用户名没有出现在第二个表中,MySQL 会从一个表中选择记录

mysql 性能,300k 行,索引慢

performance - NoSQL 数据库性能测试

Oracle 11gR2 - 查看函数列评估

mysql - 递归查询性能问题

c++ - 排序优化时间

mysql - 当分类向量存储在引号中时的 RSQLite 查询

mysql - 左连接问题

entity-framework - 如何高效地将 EF linq 查询迁移到 Dapper?

php - 我可以使用 SQL 命令来获得一些帮助