mysql에서 datetime 필드를 인덱싱하는 것이 좋은 생각입니까?
저는 큰 데이터베이스를 설계하는 일을 하고 있습니다.예를 들어, 현재 400만 개의 레코드가 있는 테이블이 하나 있습니다.대부분의 쿼리는 datetime 절을 사용하여 데이터를 선택합니다.mysql 데이터베이스에서 datetime 필드를 인덱싱하는 것이 좋은 생각입니까?
Select field1, field2,.....,field15
from table where field 20 between now() and now + 30 days
데이터베이스가 정상적으로 작동하고 쿼리가 원활하게 실행되도록 노력하고 있습니다.
또한, 고효율 데이터베이스를 작성하려면 어떤 아이디어가 필요하다고 생각하십니까?
MySQL은 조건 간의 행을 제거하는 등 다양한 이유로 인덱스를 사용할 것을 권장합니다.http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
따라서 쿼리에서 자주 사용하는 조건에서 datetime 열을 사용할 경우 인덱스에 적합한 후보가 됩니다.당신의 유일한 조건이BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)
이 조건에는 다른 인덱스가 없습니다.MySQL은 모든 쿼리에 대해 전체 테이블 스캔을 수행해야 합니다.30일 동안 몇 개의 행이 생성되는지 알 수 없지만, 전체 행의 약 1/3 미만이면 열에 인덱스를 사용하는 것이 더 효율적입니다.
효율적인 데이터베이스 작성에 대한 질문은 매우 광범위합니다.정규화되어 있는지 확인하고 모든 적절한 열(예: 조인 및 절에 사용되는 열)을 인덱싱해야 합니다.
여기서 필자는 테스트를 수행했는데, 정수 Unix 타임스탬프가 Date Time보다 더 좋다는 것을 알 수 있었습니다.MySql을 사용했어요하지만 어떤 DB엔진을 사용하셔도 정수를 비교하는 것이 날짜 비교보다 조금 빠르기 때문에 날짜 시간 인덱스보다 int 인덱스가 더 좋다고 생각합니다.T1 - 두 날짜를 비교하는 시간, T2 - 두 정수를 비교하는 시간을 취합니다.인덱스 필드에 대한 검색은 균형 잡힌 트리를 기반으로 하기 때문에 약 O(log(rows) 시간이 소요됩니다. DB 엔진마다 다를 수 있지만 어쨌든 Log(rows)는 일반적인 추정치입니다.(비트 마스크 또는 r-tree 기반 인덱스를 사용하지 않는 경우).따라서 (T2-T1)*로그(행)는 쿼리를 자주 실행하는 경우 역할을 할 수 있습니다.
언급URL : https://stackoverflow.com/questions/15425230/is-it-a-good-idea-to-index-datetime-field-in-mysql
'programing' 카테고리의 다른 글
MySQL은 예외 없이 테이블이 존재하는지 확인합니다. (0) | 2023.01.10 |
---|---|
mysql-python 설치 오류: include 파일 'config-win'을 열 수 없습니다.h' (0) | 2023.01.10 |
CPanel을 사용하여 크론 작업에서 PHP 파일 실행 (0) | 2023.01.10 |
Echarts3.0 쌓인 막대 차트에서 Y 축에 대한 백분율 표시 (0) | 2023.01.10 |
오류 "Uncatched SyntaxError:JSON.parse에 예기치 않은 토큰이 있습니다. (0) | 2023.01.10 |