2

我确实对在 Mysql 中进行搜索有疑问或误解。


在我的表中,我有 2 个字段,第一个ID(int 8)和第二个used(int 1)。

used字段只得到 0 或 1 像布尔值。

假设行数为 20001,

about ID:我的最后一个 ID 是 20001,第一个 ID 是 1。

about used:只有我的第一行 ID = 1 为 1,其他为 0。

现在,当我想获得一排时,我编写了这段代码。没关系。

 SELECT * 
 FROM  `table` 
 WHERE  `used` =0
 LIMIT 0 , 1

我只想要一个 0 数量的行used。但我的问题是:我想,Mysql 搜索所有的 20000 行,所以给我一行。这会伤害我,因为我只想要一排数量为 0used 的最佳方式是什么?

4

2 回答 2

2

这将返回第一个匹配项,并且在找到第一个匹配项时搜索将停止。

1.

SELECT TOP 1 *
FROM `table`
WHERE `used`=0
 OR NOT (EXISTS (SELECT NULL FROM `table` WHERE `used`=0))
ORDER BY ASCENDING;

2.

SELECT *
FROM `table`
WHERE `used`=0
 OR NOT (EXISTS (SELECT NULL FROM `table` WHERE `used`=0))
ORDER BY ASCENDING LIMIT 1;

两者都做同样的事情,运行你的测试,看看哪个执行得更快。

于 2012-08-25T10:20:32.000 回答
1
SELECT * FROM table_name WHERE used = "0";

将为您提供所有使用值为 0 的行,其中:

SELECT * FROM table_name WHERE used = "0" LIMIT 1;

会给你一行,使用值为 0。

如果这不是你要找的,你能澄清你的问题吗?

如果您需要最后一条记录

SELECT * FROM table_name WHERE used = "0" ORDER BY id DESC LIMIT 1;

编辑:

如果您担心查询的速度,我怀疑如果您通过命令行(或您喜欢的工具)启动 mysql 并运行提供给只有那么多记录的表的查询,您会得到一句话说明需要多长时间,如果它绝对没有,它可能会说(0.00 秒)。:)

如果您的表变得更复杂,请考虑学习对某些列使用 mysql 索引:http: //dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

关于 MySQL 中的保留字:

您的表格命名引起了我的注意,您应该考虑使用除table表格名称之外的其他名称,这样您在使用表格时就不需要在表格单词周围使用引号。(您也在used甚至不是保留字的单词周围使用它们。

MySQL(5.5) 中应避免使用的保留字列表:http: //dev.mysql.com/doc/refman/5.5/en/reserved-words.html

于 2012-08-25T10:11:33.160 回答