我有一个classified_id
变量,它匹配MySql表中的一个文档。
我目前正在提取有关该记录的信息,如下所示:
SELECT * FROM table WHERE table.classified_id = $classified_id
我想知道是否有更快的方法,例如:
SELECT 1 FROM table WHERE table.classified_id = $classified_id
最后一个只选择1条记录,这正是我需要的,所以它不必扫描整个表,而是在找到1之后停止搜索记录?
或者我是在梦中这个?
由于
答案 0 :(得分:6)
您想使用LIMIT
:
SELECT * FROM table WHERE table.classified_id = $classified_id LIMIT 1
答案 1 :(得分:4)
是的,你是在梦想这个 你的推理有两个主要错误:
答案 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
这是检索数据的最快方法(假设您需要表中的所有列)
您可以执行以下操作:
除此之外,对于这样一个简单的查询,唯一的下一步就是将表分区为多个硬盘驱动器(可能不是您系统上的选项)。