我的表中有大量行,table_1
. 有时我只需要检索特定的行。
我假设,当我使用带有 WHERE 子句的 SELECT 查询时,它会遍历第一行,直到它符合我的要求。
有没有办法让查询跳转到特定的行,然后从该行开始?
例子:
假设有 50,000,000 行,我要搜索的 id 是 53750。我需要的是:搜索可以从 50000 开始,这样可以节省搜索 49999 行的时间。
我不知道确切的术语,因为我不是 SQL 专家!
您需要创建一个索引:http ://dev.mysql.com/doc/refman/5.1/en/create-index.html
ALTER TABLE_1 ADD UNIQUE INDEX (ID);
我理解它的方式,你想选择一个 id 为 53750 的行。如果你有一个名为 id 的字段,你可以这样做:
SELECT * FROM table_1 WHERE id = 53750
连同索引 id 字段。这是最快的方法。我所知道的。
我很确定任何对自己有一点尊重的 SQL 数据库都不会从第一行开始循环以获得所需的行。但我也不确定它们是如何工作的,所以我不能给出确切的答案。
您可以查看 WHERE 子句中的内容以及表的索引方式。你有正确的主键吗?就像为此使用数字数据类型一样。您是否在查询中使用了更多列的索引?
安装数据库服务器时还有很多需要考虑的问题,比如数据和日志文件放在哪里,给服务器多少内存以及设置增长。您可以做很多事情来调整服务器。
ALTER table_1 ADD UNIQUE INDEX (<collumn>)
如果它没有自动生成,那将是一个很好的第一步。您还可以使用:
EXPLAIN <your query here>
看看在这种情况下哪种查询效果最好。请注意,如果您想更改 where 语句(将来的任何地方),但在那里看到一个返回值,那么最好在其上放置一个索引。
在要执行的列上创建索引SELECT
:
CREATE INDEX index_1 ON table_1 (id);
然后,像以前一样选择行。
而且,请阅读数据库、数据库设计和优化。你的问题充满了错误的假设。不要只是逐字复制和粘贴我们的答案。接受教育!
关于优化选择查询,如Range和Where 子句优化,有几件事需要了解,有关此问题的文档非常有用,请阅读以下部分:优化 SELECT 语句。在您评估的列上创建索引对性能也很有帮助。
一种可能的解决方案您可以创建视图,然后从视图中查询。这是创建视图和从视图获取数据的详细信息
http://www.w3schools.com/sql/sql_view.asp
现在您只需将大量行拆分为多个视图(即一个视图中的第 1-10000 行,然后另一个视图中的 10001-20000 行)
然后从视图中查询。
您可以尝试将表拆分为分区
在您的情况下,您可以为每 50.000 行在 ID 上创建一个分区,当您想跳过前 50.000 行时,您只需从分区 2 中选择。如何做到这一点在 MySQL 文档中得到了很好的解释。
你可以试试这个简单的。
query = "SELECT * FROM tblname LIMIT 50000,0
我刚刚用 phpmyadmin 试了一下。其中“50,000”是要查找的起始行。
编辑:但如果我是你,我不会使用这个,因为它会使 1 - 49999 记录失效。