mysql如何隔1000條取一條
表結構如下:
id int
name varchar
create_time datetime
uj5u.com熱心網友回復:
id有序自增不間斷,直接WHERE id%1000=1 即可不然就根據ID排序,造一個有序自增不間斷的列出來,然后用此列做計算
uj5u.com熱心網友回復:
我的邏輯是先增加個排序欄位,用序號除以1000,結果是整數則滿足條件,下面案例我是隔10取DECLARE @TEMP TABLE(ID VARCHAR(50),NAME VARCHAR(50))
INSERT INTO @TEMP
SELECT 'A','x' UNION ALL
SELECT 'B','x' UNION ALL
SELECT 'C','x' UNION ALL
SELECT 'P','x' UNION ALL
SELECT 'D','x' UNION ALL
SELECT 'E','x' UNION ALL
SELECT 'F','x' UNION ALL
SELECT 'G','x' UNION ALL
SELECT 'H','x' UNION ALL
SELECT 'I','x' UNION ALL
SELECT 'J','x' UNION ALL
SELECT 'K','x' UNION ALL
SELECT 'L','x' UNION ALL
SELECT 'M','x' UNION ALL
SELECT 'N','x' UNION ALL
SELECT 'O','x'
DECLARE @number numeric(10,2)
SET @number=10
---按序號排序
SELECT B.*,CASE WHEN CAST(B.Result AS INT)=B.Result
THEN '整數'
else
'小數'
end
FROM (
SELECT A.*,Result=CAST(A.NO/@number AS numeric(10,2))FROM (
SELECT NO=ROW_NUMBER() OVER(ORDER BY ID)-1,* FROM @TEMP) A)B
最后再把整數的查出來即可
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
1)對于單調遞增的id值,where mod(i,1000)=1,較為簡單,全表掃描。2)簡單粗暴limit n,1 程式上做輪訓,但是對于資料量較大的表,隨著批次變大,會變慢。
3)每個批次取1000條,取第一條,并且獲取最大id的值,作為下個批次的id起始條件。sql性能隨著資料量增長不變化。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/8742.html
標籤:MySQL
上一篇:Mysql 架構分析
下一篇:求SQL陳述句寫法
