在mysql搜索结果

时间:2012-08-25 10:04:13

标签: mysql sql

我对Mysql中的搜索有疑问或误解。


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

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

假设行数为20001,

关于ID:我的上一个ID是20001,第一个ID是1.

关于used:我的第一行ID = 1是1,其他的是0。

现在,当我想要获得一行时,我会写下这段代码。没关系。

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

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

2 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分: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