엽토군님 결과 파일을 올려드립니다.

조회수 424회

쿼리1

이미지

쿼리 2

CREATE TABLE `Basic12MFW1D` (
   `code` longtext,
   `name` longtext,
   `ChangeOP` double DEFAULT NULL,
   `ChangeNP` double DEFAULT NULL,
   `ChangeOPM` double DEFAULT NULL,
   `ChangeROE` double DEFAULT NULL,
   `ChangeSales` double DEFAULT NULL,
   `year` int(11) DEFAULT NULL,
   `month` int(11) DEFAULT NULL,
   `day` int(11) DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

입니다.

  • 혹시 year, month, day로 구분해둔 이유가 있나요? date 형식의 칼럼하나면 3개 칼럼이 하나로 합쳐질거같은데... 그와 다르게 원 질문 확인해봤는데 `` year month day에 대해서 인덱싱이 안되서 조회시간이 느리게 걸리시는거같아요 김호원 2019.12.31 09:42

1 답변

  • 일단 테이블에 인덱스가 전혀 없는 것은 확실해 보입니다. 그러니 당연히 느립니다. 왜냐하면 이는 말하자면 목차("index") 없는 책에서 원하는 문장을 찾는 것과 흡사한 상황이기 때문입니다.

    사람들은 목차 없는 책을 뒤질 때 "아무리 그래도 여기에는 없다" 싶은 곳은 적당히 패스해 가면서 뒤집니다. 하지만 데이터베이스는 그런 거 없이 제 1페이지부터 열어서 읽고 넘기고 열어서 읽고 넘기면서 문장을 찾습니다. 그래서 느린 겁니다. 필요 없는 year, month, day를 패스해 가면서 뒤지게 하려면 year, month, day에 관한 목차를 지정하고 정리하도록 하셔야 해요.

    사실 여기서부터는 저보다 DB를 더 잘 아시는 분들의 도움을 받으셔야 할 거 같습니다. 테이블에 락을 걸고, 지금이라도 적당히 CREATE INDEX ... ON Basic12MFW1D 명령을 써서 인덱스를 추가해야 하기 때문이지요. 그 인덱싱 전략은... 제가 DB를 잘 모르겠어서 부득이 패스합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)