1

我的表中有大量行,table_1. 有时我只需要检索特定的行。

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

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

例子:

假设有 50,000,000 行,我要搜索的 id 是 53750。我需要的是:搜索可以从 50000 开始,这样可以节省搜索 49999 行的时间。

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

4

9 回答 9

3

您需要创建一个索引:http ://dev.mysql.com/doc/refman/5.1/en/create-index.html

ALTER TABLE_1 ADD UNIQUE INDEX (ID);
于 2013-02-27T07:48:03.533 回答
1

我理解它的方式,你想选择一个 id 为 53750 的行。如果你有一个名为 id 的字段,你可以这样做:

    SELECT * FROM table_1 WHERE id = 53750

连同索引 id 字段。这是最快的方法。我所知道的。

于 2013-02-27T07:47:05.913 回答
0

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

您可以查看 WHERE 子句中的内容以及表的索引方式。你有正确的主键吗?就像为此使用数字数据类型一样。您是否在查询中使用了更多列的索引?

安装数据库服务器时还有很多需要考虑的问题,比如数据和日志文件放在哪里,给服务器多少内存以及设置增长。您可以做很多事情来调整服务器。

于 2013-02-27T07:51:58.590 回答
0
 ALTER table_1 ADD UNIQUE INDEX (<collumn>)

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

 EXPLAIN <your query here>

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

于 2013-02-27T07:49:45.500 回答
0

在要执行的列上创建索引SELECT

CREATE INDEX index_1 ON table_1 (id);

然后,像以前一样选择行。

而且,请阅读数据库、数据库设计和优化。你的问题充满了错误的假设。不要只是逐字复制和粘贴我们的答案。接受教育!

于 2013-02-27T07:50:07.450 回答
0

关于优化选择查询,如RangeWhere 子句优化,有几件事需要了解,有关此问题的文档非常有用,请阅读以下部分:优化 SELECT 语句在您评估的列上创建索引对性能也很有帮助。

于 2013-02-27T07:50:17.573 回答
0

一种可能的解决方案您可以创建视图,然后从视图中查询。这是创建视图和从视图获取数据的详细信息

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

现在您只需将大量行拆分为多个视图(即一个视图中的第 1-10000 行,然后另一个视图中的 10001-20000 行)

然后从视图中查询。

于 2013-02-27T07:50:20.720 回答
0

您可以尝试将表拆分为分区

有关更改表以添加分区的更多信息

从特定分区中选择

在您的情况下,您可以为每 50.000 行在 ID 上创建一个分区,当您想跳过前 50.000 行时,您只需从分区 2 中选择。如何做到这一点在 MySQL 文档中得到了很好的解释。

于 2013-02-27T09:10:45.520 回答
-1

你可以试试这个简单的。

query = "SELECT * FROM tblname LIMIT 50000,0

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

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

于 2013-02-27T07:53:09.090 回答