나는 꽤 큰 테이블 (100 ~ GB)에 대해 실행하는 일부 삭제 쿼리를 가지고 있고, 나는 그들에게 가능한 한 많은 최적화 할 :MySQL의 문 최적화 삭제
delete from table1 where column1 < date_sub(now(), interval 100 hour);
, 컬럼 내가하는 datetime
열입니다 이 열에 대한 색인을 작성하면 삭제 속도가 빨라 집니다. 그 외에, 내가 여기서 할 수있는 건? date_sub()
함수를 사용하면 쿼리 속도가 느려 집니까? 쿼리를 실행하기 전에 그 값을 계산해야합니까?
delete from table2 where column2 = x;
column2는 table2의 기본 키이므로 이미 mysql 설명서에 따라 색인입니다. 제 질문은 : 인덱스 종류가 PRIMARY
이고, INDEX
과 같습니까? 속도 향상을 위해 INDEX
종류의 다른 색인을 만들어야합니까?
delete from table3 where column3 = y;
table3에는 column3 및 column4 인 복합 기본 키가 있습니다. 그래서 기본 키 인덱스가 있지만 삭제 쿼리를 column4, column3에 대해 별도의 인덱스를 만들지 않습니다 이후로 사용합니까? 또는 결합 된 기본 키가 그것을 할 것인가?
나는 이것들이 꽤 기본적인 질문이라고 생각하지만, 나의 상황에 특정한 확실한 대답을 찾을 수 없기 때문에 어떤 도움을 주시면 감사하겠습니다!
첫 번째 단계는 해당 삭제 명령문에서'EXPLAIN'을 사용하여 수행중인 작업을 확인하는 것입니다. 필요할 경우 붙여 넣으십시오. – Schwern
'EXPLAIN'은'SELECT' 문에서만 작동합니다 (아직). –
나는 column1이'DATETIME'이 아니라'DATE'라고 가정한다. 그렇지 않으면 1 시간 간격으로 바보가됩니다. – Schwern