我想構建一個查詢,顯示錶中的所有結果,但是從表的起始位置偏移5。據我所知,MySQL的LIMIT需要一個限制和一個偏移量。有沒有辦法做到這一點?Mysql偏移量無限行
回答
檢索所有行從某個 偏移到最後的結果 集合中,可以使用一些大數目作爲 的第二個參數。這種說法 檢索的所有行第96列 到最後:
SELECT * FROM tbl LIMIT 95, 18446744073709551615;
太可怕了!我來到了這裏,希望MySQL能夠使Limit的條款成爲可選的,但是也提供了偏移量......但不是! 我已經看到了這個18446744073709551615遍佈整個代碼,我在指責懶惰的程序員,但它是一個設計特徵! – Petruza 2010-05-24 15:10:02
awfull答案,但多數民衆贊成在官方從MySQL文件。我可以說@ _ @ – GusDeCooL 2011-10-19 18:06:53
18446744073709551615對於那些想知道的人來說是2^64-1。您可能需要小心,因爲您無法將此值存儲在32位整數中。您必須確保將其存儲爲字符串以確保兼容性。 – AlicanC 2011-12-07 22:51:51
至於你提到它限制是必需的,所以你需要使用的最大極限可能,這是18446744073709551615(最大無符號BIGINT的)
SELECT * FROM somewhere LIMIT 18446744073709551610 OFFSET 5
哇,這是MySQL團隊的官方解決方案嗎? – Antony 2011-05-23 18:11:16
另一種方法是選擇一個autoimcremented列,然後使用具有過濾。
SET @a := 0;
select @a:[email protected] + 1 AS counter, table.* FROM table
HAVING counter > 4
但是我可能會堅持使用高限制方法。
就在今天,我正在閱讀有關從mysql表中獲取大量數據(超過一百萬行)的最佳方法。一種方法是,如所暗示的那樣,使用LIMIT x,y
,其中x
是偏移量,而y
是您想返回的最後一行。但是,正如我發現的那樣,這不是最有效的方式。如果您有一個自動增量列,可以輕鬆使用SELECT
聲明和WHERE
子句聲明要從哪條記錄開始。
例如, SELECT * FROM table_name WHERE id > x;
看來,當您使用LIMIT
,MySQL的獲取所有結果,然後只能說明你適合在記錄偏移:沒有最好的性能。
來源:對此問題的回答MySQL Forums。請注意,問題是大約6歲。
我知道這是舊的,但我沒有看到類似的迴應,所以這是我將使用的解決方案。
首先,我會對錶執行計數查詢以查看存在多少記錄。這個查詢很快,通常執行時間可以忽略不計。喜歡的東西:
SELECT COUNT(*) FROM table_name;
然後,我會用我的數了我的極限結果建立我的查詢(因爲這是行的最大數目表可能可能返回)。喜歡的東西:
SELECT * FROM table_name LIMIT count_result OFFSET desired_offset;
或者可能是這樣的:
SELECT * FROM table_name LIMIT desired_offset, count_result;
,
當然,如果有必要,你可以從count_result減去desired_offset得到一個實際的,精確值提供爲限。如果我真的可以確定提供的適當限制,傳遞「18446744073709551610」值就沒有意義。
WHERE .... AND id > <YOUROFFSET>
ID可以是任何自動遞增或唯一的數字列你有...
使用這種其他question和合並與格雷格的答案那招,你可以使用〜0而不是最大的無符號BIGINT值:
SELECT * FROM tbl LIMIT ~0 OFFSET 95;
或
SELECT * FROM tbl LIMIT 95, ~0;
可以使用MYS QL聲明與極限:
START TRANSACTION;
SET @my_offset = 5;
SET @rows = (SELECT COUNT(*) FROM my_table);
PREPARE statement FROM 'SELECT * FROM my_table LIMIT ? OFFSET ?';
EXECUTE statement USING @rows, @my_offset;
COMMIT;
在MySQL 5.5.44測試。因此,我們可以避免插入數字18446744073709551615.
注意:事務可以確保變量@rows與執行語句時考慮的表格一致。
正如在其他答案中指出的那樣,MySQL建議使用18446744073709551615作爲限制中的記錄數,但請考慮:如果您獲得18,446,744,073,709,551,615條記錄,您會做什麼?事實上,如果你有10億條記錄,你會怎麼做?
也許你確實想要超過10億條記錄,但我的觀點是,你想要的數量有一些限制,它要小於18十億分之一。爲了穩定性,優化和可用性,我建議在查詢中加入一些有意義的限制。這也可以減少任何人從未見過神奇數字的困惑,並且至少能夠傳達您願意同時處理多少條記錄的額外好處。
如果你真的必須從你的數據庫中得到所有18條記錄,也許你真正想要的是以1億的增量抓取它們並循環1840億次。
- 1. 偏移MySQL的無限制
- 2. mysql偏移量的真實行爲
- 3. mysql中的負偏移量?
- 4. MYSQL大LIMIT偏移量
- 5. objdump,顯示無偏移量
- 6. MySQL的限制和偏移誤差
- 7. mysql中的負限制偏移
- 8. mysql性能的連接限制和偏移量
- 9. 限制偏移量的MySQL搜尋 - 掃描優化
- 10. 使用限制/偏移量時mysql查詢的重疊結果
- 11. mplot3d:contourf偏移量,限制和刻度
- 12. Laravel 4.1:Eloquent偏移量和限制
- 13. 無限空間,相機偏移量計算
- 14. Zend DB無法模擬MS SQL的限制和偏移量
- 15. UINavigationController偏移量
- 16. UIBarButtonItem偏移量
- 17. MYSQL查詢:未定義偏移量:2
- 18. 從偏移量中選擇一部分數據從偏移量到偏移量
- 19. PHP + MySql分類和無偏移分頁
- 20. SQL如何執行限制和偏移量?
- 21. TimeZone偏移量顯示無效值
- 22. 獲取日期無偏移量
- 23. 限制和偏移不可
- 24. 如何獲得MySQL中特定行的偏移量?
- 25. objdump報告的符號偏移量不再匹配運行時偏移量
- 26. VBA變量和偏移量
- 27. 爲每行添加偏移量
- 28. 多行上未定義的偏移量
- 29. SQL Server中的行偏移量
- 30. Excel中最後一行的偏移量
這是一個完全有效的問題,但我想知道最好是抓住一切,並以編程方式忽略頭幾個記錄。鑑於似乎是最好的答案(限制5,18446744073709551615)的恐怖,我非常喜歡解決MySQL的LIMIT的侷限性。 – cesoid 2015-01-31 02:31:10
@cesoid如果你想要`限制5000,18446744073709551615`,該怎麼辦?你不會爲了你的代碼看起來漂亮而獲得額外的5000行。 – elipoultorak 2015-10-26 11:03:23
@ user3576887我認爲你是對的,我只是在考慮上面的問題,假設5是唯一的要求,而不是一些可能更大的變化量(而不是解決別人的問題)。 – cesoid 2015-10-28 14:29:52