2013-12-19 60 views
-1

我有一个MySQL查询,我想从表底部到顶部提取结果。我认为ORDER BY,但我正在寻找更快/更高效的东西。我只想知道是否有内置的东西让搜索从底部(即最近)到顶部(最早)。从上到下MySQL提取结果

我的数据库很大,所以我认为ORDER BY可能会很慢。提前致谢!

+0

为您正在订购的列添加索引 –

+0

@chuex我确实有一个我正在订购的索引。我认为这种方法,我只是问是否有更好的方法。 – Shahar

+0

如果您发布现有的查询,表格结构和任何查询计划,这将有所帮助。正如它所写,很难给出答案。 –

回答

0

对数据库中的数据进行排序几乎肯定会更高效。数据库旨在处理大量数据。中间层不可用的数据库有多种优化可用。如果您打算在中间层编写一个超高效的排序例程,该例程利用了您对数据所没有的信息(数据库没有)(例如,将数据集中到一个数十台中间层机器集群中,以便排序永远不会泄漏到磁盘上,利用数据大部分命令选择一种通常不会特别有效的算法的事实),您可能会超出数据库的排序速度。但这往往是罕见的。

根据查询,例如,数据库优化程序可能会选择一个查询计划,该计划按顺序返回数据,而不执行排序。例如,数据库知道索引中的数据是已排序的,因此它可以选择执行索引扫描来按顺序返回数据,而不必实现和排序整个结果集。如果它必须实现整个结果,它只需要你正在排序的列和某种行标识符(例如Oracle中的ROWID),而不是排序整行数据,就像天真的中间层实现可能会做的那样。例如,如果在(col1,col2)上有复合索引,并且您决定在UPPER(col2),LOWER(col1)上进行排序,则数据库可以从索引读取col1 & col2值,对行标识符进行排序,以及然后从表中获取数据。当然,数据库不必这样做 - 优化器将考虑对从表或各种索引获取数据的成本进行排序的成本。数据库可能会得出结论:最有效的方法是执行表扫描,将整行读入内存并对其进行分类。它可以得出结论,利用索引可以获得更多的I/O来获取数据,但通过减少或消除排序成本来弥补。

1

我推荐使用ORDER BY column_name DESC子句比从它的php程序中排序更快。