C#/c#
[ c# ] mysql db 조회시 페이징 이용 (너무 많은 데이터 받아와야할때 사용)
code094
2022. 12. 30. 12:26
mysql 에서 데이터 조회해와야 하는데 한번에 받아오는 데이터개수가 몇십만개~몇백만개 이상일때도 있음
그럼 무작정 타임아웃나지않게 걸어두고 마냥 기다릴수는 없으니 페이징 처리해서
디비 id (auto increment) 값으로 10000개씩 받아오게 함
public class TestResult
{
public long id { get; set; }
public string name { get; set; }
public int score { get; set; }
public DateTime time { get; set; }
}
static void Main(string[] args)
{
while (true)
{
using (var connection = new MySqlConnection("Server=ip;Port=port;User ID=id;Password=pw;Database=db_name"))
{
connection.Open();
var endTime = DateTime.Now;
var startTime = endTime.AddYears(-1);
var firstDetect = connection.Query<long>(String.Format("SELECT id FROM db_name where time >= '{0}'", startTime.ToString("yyyy-MM-dd HH:mm:ss")));
var detectId = firstDetect.ToList()[0]-1;
var limit = 10000;
var queryCount = limit;
var totalCount = 0;
while (queryCount == limit)
{
var Results = connection.Query<TestResult>(String.Format("SELECT id, name, score, time FROM db_name where id > {0} AND time <= '{1}' LIMIT {2}", detectId, endTime.ToString("yyyy-MM-dd HH:mm:ss"), limit)).ToList();
queryCount = Results.Count;
detectId = Results[Results.Count - 1].id;
totalCount += queryCount;
}
Console.ReadLine();
}
}