MySQL中优化的SELECT查询

时间:2013-02-27 07:44:11

标签: mysql sql mysqli

我的表格中有很多行table_1。有时我只需要检索一个特定的行。

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

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

示例:

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

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

9 个答案:

答案 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)

有关优化RangeWhere 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条记录进行搜索。