[英]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.