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();
                }
            }