【发布时间】:2009-01-28 02:27:26
【问题描述】:
假设我想检查 MySQL 表中的记录是否存在。我会运行一个查询,检查返回的行数。如果有 0 行,则执行此操作,否则执行此操作。
SELECT * FROM table WHERE id=5
SELECT id FROM table WHERE id=5
这两个查询之间有什么区别吗?是花精力返回每一列,还是花精力过滤掉我们不关心的列?
SELECT COUNT(*) FROM table WHERE id=5
是一个全新的问题。服务器会抓取所有值然后计算这些值(比平常更难),还是它不会费心抓取任何东西而只是在每次找到匹配项时增加一个变量(比平常更容易)?
我认为我对 MySQL 的工作原理做出了很多错误的假设,但这就是问题的实质!我哪里错了?教育我,堆栈溢出!
【问题讨论】:
-
AFAIK,这将取决于您的 MySQL 数据库使用的实际存储类型,例如InnoDB 与 MyISAM。您使用哪个数据库?
-
这是一个比较笼统的问题,所以我想说“这取决于存储类型”本身就是答案!
-
可以使用这里描述的方法之一stackoverflow.com/q/9026184/1168944
标签: sql mysql performance