sql - 使用 SELECT * 时的性能问题?

标签 sql database performance

<分区>

Possible Duplicate:
Which is faster/best? SELECT * or SELECT column1, colum2, column3, etc
What is the reason not to use select *?

使用 SELECT * 而不是 SELECT FiledName, FiledName2 ... 有任何性能问题吗?

最佳答案

如果您需要列的子集,那么您对优化器的帮助就不好(不能选择索引,或者不能只去索引,...)

一些数据库可以选择只从索引中检索数据。那东西非常有用,可以提供令人难以置信的加速。运行 SELECT * 查询不允许使用此技巧。

不管怎样,从应用的角度来说都不是一个好的做法。


例子:

  • 您有一个包含 20 列(C1、C2、...、C19 C20)的表 T。
  • 你在 T 上有一个关于 (C1,C2) 的索引
  • 你制作SELECT C1, C2 FROM T WHERE C1=123
  • 优化器拥有索引上的所有信息,不需要去表数据

相反,如果您SELECT * FROM T WHERE C1=123,优化器需要获取所有列数据,则无法使用 (C1,C2) 上的索引。

在连接多个表时非常有帮助。

关于sql - 使用 SELECT * 时的性能问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/487578/

相关文章:

mysql - MySQL中的case语句

javascript - 如何使用 sequelize/mysql 删除特定实例的关系

python - 只读对象模型的 SqlAlchemy 优化

iphone - iPhoneOS 会自动清除库/缓存吗?

sql - 检索最近执行的 SQL 命令 (T-SQL)

mysql - 从所有列中选择最后(最近)填充的值

sql - 具有来自不同表的多列的外键

performance - Redis CPU 在排序集上的性能

php - mysql和php建错了?

sql - 使用 case 语句时的 Group By 子句问题