본문 바로가기
개발/에러해결

mysql query 시간이 오래 걸리고 느릴 때

by amkorousagi 2023. 3. 10.

에러 내용


mysql query time is too slow

select * from <TABLE> where <COL_NAME>=<VALUE>  order by <COL_NAME>;

mysql query가 너무 오래 걸리고 느립니다.

이런 query를 사용하는 front 나 back에도 성능 면에서 안 좋은 영향이 나타납니다.

 

에러 원인


1. 너무 많은 row

: 현재 테이블에 약 400만 개의 row가 있습니다.

 

2. 비효율적인 query

: ordery by나 where과 같은 추가적인 리소스 소모를 일으키는 query가 있습니다.

 

해결 방법


세 가지 정도의 해결 방법을 생각할 수 있습니다.

  1. index를 사용합니다.
  2. limit을 사용합니다.
  3. order by 나 where를 다른 방식으로 구현합니다.
ALTER TABLE `<TALBE>` ADD INDEX `<NEW_INDEX_NAME>` (`<COL_NAME>`);

 

저는 order by에 해당하는 column을 index로 설정하고 limit을 사용하며, order by와 where을 쿼리로 받아온 제한된 개수의 row만을 대상으로 back에서 직접 구현하여 쿼리 응답 시간과 서버 응답 시간을 3초가량에서 0초가량으로 줄였습니다. 

mysql query time is fast

자세한 내용은 private github page에 있습니다.

 

참고 자료


 

 

MySQL :: MySQL 8.0 Reference Manual :: 13.2.13 SELECT Statement

13.2.13 SELECT Statement SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr] ... [into_option] [FROM table_referenc

dev.mysql.com

 

 

How do I add indexes to MySQL tables?

I've got a very large MySQL table with about 150,000 rows of data. Currently, when I try and run SELECT * FROM table WHERE id = '1'; the code runs fine as the ID field is the primary index. Howev...

stackoverflow.com

 

댓글