哪个MySql行更快:

时间:2010-04-20 17:39:03

标签: php mysql sql database

我有一个classified_id变量,它匹配MySql表中的一个文档。

我目前正在提取有关该记录的信息,如下所示:

   SELECT * FROM table WHERE table.classified_id = $classified_id

我想知道是否有更快的方法,例如:

   SELECT 1 FROM table WHERE table.classified_id = $classified_id

最后一个只选择1条记录,这正是我需要的,所以它不必扫描整个表,而是在找到1之后停止搜索记录?

或者我是在梦中这个?

由于

4 个答案:

答案 0 :(得分:6)

您想使用LIMIT

SELECT * FROM table WHERE table.classified_id = $classified_id LIMIT 1

答案 1 :(得分:4)

是的,你是在梦想这个 你的推理有两个主要错误:

  1. 问题本身。尽管如此,大多数新手都未能成功。他们问“如果我做了什么 - 它会更快吗?”。但正确的问题是“我的申请运行缓慢。如何找到瓶颈?”和“我有一定的瓶颈。如何消除它?”
  2. 您认为影响数据库搜索的字段列表部分。那是错的。字段列表仅负责找到的行的返回字段。在这两种情况下,行数都是相同的。

答案 2 :(得分:2)

您应该在classified_id列中添加索引以避免表扫描。

CREATE INDEX classified_idx ON table (classified_id);

答案 3 :(得分:2)

你为什么不试试?

SELECT 1 FROM table;

返回

+---+
| 1 |
+---+
| 1 | 
| 1 | 
| 1 | 
| 1 | 
| 1 | 
| 1 | 
+---+
6 rows in set (0.00 sec)

这是一个计算列,在这种情况下常量值为1(对于我的测试用例中的所有6行)。

对于你的问题

SELECT * FROM table WHERE table.classified_id = $classified_id

这是检索数据的最快方法(假设您需要表中的所有列)

您可以执行以下操作:

  • 检查classified_id上是否有索引,如果有,如果使用索引更快,数据库将使用索引而不扫描整个表,那么你将得到你想要的东西(使用索引可能会更慢,如果只有少数记录或者如果高百分比的记录满足标准,但索引不会对读取数据造成任何惩罚,数据库将选择最佳方式来检索它。)
  • 如果您不需要表格中的所有列,那么请准确指定您需要的列
  • 如果有多条记录满足条件,则可以使用LIMIT关键字仅获取一条记录或仅记录少数记录

除此之外,对于这样一个简单的查询,唯一的下一步就是将表分区为多个硬盘驱动器(可能不是您系统上的选项)。