我看到过很多这样的问题。

Select 1  
From table

这个1是什么意思,它将如何执行,它将返回什么?

另外,在什么类型的场景中可以使用它?


当前回答

原因是另一个,至少对MySQL来说是这样。这是来自MySQL手册

InnoDB在表启动后第一次访问该表时计算索引基数值,而不是将这些值存储在表中。在将数据划分为许多表的系统上,这个步骤会花费大量时间。由于此开销只应用于初始的表打开操作,为了“预热”一个表以供以后使用,可以在启动后立即通过发出SELECT 1 FROM tbl_name LIMIT 1这样的语句来访问它

其他回答

Select 1 from table被一些数据库用作测试连接的查询,以查看它是否处于活动状态,通常用于从连接池检索或返回连接。

我看到它总是用于SQL注入,例如:

www.urlxxxxx.com/xxxx.asp?id=99 union select 1、2、3、4、5、6、7、8、9 from database;

这些数字可用于猜测数据库存在的位置,并猜测您指定的数据库的列名。以及表的值。

原因是另一个,至少对MySQL来说是这样。这是来自MySQL手册

InnoDB在表启动后第一次访问该表时计算索引基数值,而不是将这些值存储在表中。在将数据划分为许多表的系统上,这个步骤会花费大量时间。由于此开销只应用于初始的表打开操作,为了“预热”一个表以供以后使用,可以在启动后立即通过发出SELECT 1 FROM tbl_name LIMIT 1这样的语句来访问它

如果你的意思是

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1 FROM table WHERE...) 

那么1优于

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT * FROM table WHERE...) 

EXISTS中的1或*被忽略,你可以按照ANSI SQL 1992标准的第191页写:

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1/0 FROM table WHERE...) 

Select 1 from table将为表中的每一行返回常量1。当您想要确定record是否匹配where子句和/或join时,它很有用。