2013-02-27 73 views
1

我的表中有很多行,table_1。有时我只需要检索一个特定的行。MySQL中优化的SELECT查询

我假设,当我用WHERE子句使用SELECT查询时,它循环遍历第一行,直到它符合我的要求。

有什么办法让查询跳转到特定的行,然后从该行开始?

例子:

假设有5000万行,我要搜索的ID是53750.我需要的是:搜索可以从50000开始,以便它可以节省时间用于搜索49999行。

因为我不是SQL专家,所以我不知道确切的术语!

+2

我认为你需要做一个索引。在id字段上有一个聚簇索引,你的数据库引擎将能够直接进入好记录而不会循环。 – 2013-02-27 07:45:23

+0

那么,正如我所说我不是专家,请你详细说明一下吗? – 2013-02-27 07:46:02

+0

http://hackmysql.com/case1 – Cris 2013-02-27 07:46:57

回答

1

我的理解是,要选择ID为53750.行如果您有名为id你可以这样做一个领域:

SELECT * FROM table_1 WHERE id = 53750 

随着索引ID字段。这是最快的方法。我所知道的。

+0

我相信OP想知道如何在特定的ID处开始查询,然后向上找到它(也就是说在运行时会找到id),所以我不确定你的答案在这方面真的有帮助。但是,这个指数肯定会让情况变得更好。 – Lighthart 2013-02-27 07:48:47

+0

我的错。我误解了这个问题。 – 2013-02-27 08:05:18

0
ALTER table_1 ADD UNIQUE INDEX (<collumn>) 

将是一个伟大的第一步,如果没有自动生成它。您还可以使用:

EXPLAIN <your query here> 

查看哪种查询在这种情况下效果最好。请注意,如果您想更改where语句(将来的任何地方),但在那里看到返回值,那么也可以将索引放在那里。

0

创建的列的索引,你想要做的SELECT上:

CREATE INDEX index_1 ON table_1 (id); 

然后,选择就像你前行。

但是,请阅读数据库,数据库设计和优化。你的问题充满了错误的假设。不要仅仅复制和粘贴我们的答案。受过教育!

0

一个可能的解决方案您可以创建视图,然后从视图查询。这里是创建视图的细节,并从视图中获得数据

http://www.w3schools.com/sql/sql_view.asp

现在你只拆分巨大的行数为许多视图(即行1-10000在一个视图然后10001-20000另一种观点)

然后从视图查询。

0

我非常确定,任何对自己有点尊重的SQL数据库都不会从第一行开始循环以获取所需的行。但我也不确定他们是如何使它工作的,所以我不能给出确切的答案。

您可以查看WHERE子句中的内容以及表的索引。你有合适的主键吗?就像为此使用数字数据类型一样。你有更多列的索引,用于查询吗?

安装数据库服务器时也有很多concided,比如放置数据和日志文件的位置,为服务器提供多少内存以及设置增长。你可以做很多事情来调整你的服务器。

-1

你可以尝试这个简单。

query = "SELECT * FROM tblname LIMIT 50000,0 

我刚刚用phpmyadmin试了一下。其中“50,000”是查找的起始行。

编辑: 但是,如果我我们是你我不会使用这一个,因为它会失去1 - 49999记录搜索。

+0

如果使用ID 53750记录不在第50,000行之后,但在它之前呢? MySQL不保证记录的存储方式。 – 2013-02-27 07:54:16

+0

作为我编辑它,我不保证你使用那一个。您可以使用二分搜索而不是线性搜索。去谷歌上查询。 – 2013-02-27 07:56:32

+0

或者让MySQL执行搜索。如果你已经设计好数据库,它就会非常好。 – 2013-02-27 07:57:48