簡體   English   中英

如何在不進行MySQL排序的情況下獲得表中記錄的第一行?

[英]How to get the first row ever recorded in a table without sorting in MySQL?

假設您有一個包含n行的表,最有效的方法是不進行排序就獲得該表上記錄的第一行?

這可以保證正常工作,但是隨着記錄數量的增加而變慢:

SELECT * FROM posts ORDER BY created_at DESC LIMIT 1;

更新:

如果存在具有相同created_at值的多個記錄,但仍然需要排序的情況,則更好。

SELECT * FROM posts ORDER BY id ASC LIMIT 1;

想象一下一本擁有100萬頁和10億行記錄的分類帳,要獲得有史以來的第一條記錄,您只需轉到第一頁並獲得第一頁的記錄,對嗎? 無論分類帳的大小如何,您都應該以相同的效率獲得有史以來的第一筆記錄。 我希望我可以在MySQL中執行相同的操作而無需進行任何排序或排序。 用於研究目的。 我的意思是,為什么不呢? MySQL為什么不能? 設計不可能嗎?

這在編程中的典型數組結構中是可能的:

array = [1,2,3,4,5]

第一個元素在array[0] ,第二個元素在array[1] ,依此類推。 無需排序。 最后一個元素是array[array_count(array)-1]

我可以提供以下兩個查詢來查找最新記錄:

SELECT * FROM posts ORDER BY created_at DESC LIMIT 1

SELECT *
FROM posts
WHERE created_at = (SELECT MAX(created_at) FROM posts

當表變大時,這兩個查詢都會受到性能下降的影響,因為查找最近創建的日期所需的排序操作將花費更多時間。

但是在兩種情況下,添加以下索引都可以提高查詢的性能:

ALTER TABLE posts ADD INDEX created_idx (created_at)

MySQL可以在ORDER BY子句中以及找到最大值時都使用索引。 請參閱文檔以獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM