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