테이블에 200 만 개가 넘는 레코드가 있습니다.더 많은 필드를 인덱싱하지 않고 카운트 성능을 향상시키는 방법은 무엇입니까?
테이블에 몇 개의 오류 (체크 표시)가 있는지, 얼마나 많은 오류가 있는지 확인하고 싶습니다.
SELECT count(*) as Checked FROM table WHERE checked = 1
성능은 정말 느리다, 그것은 결과를 얻기 위해 약 5 분 소요 -
가SELECT count(*) as CountError FROM table WHERE checked = 1 AND error != ''
:
나는 두 개의 쿼리를 수행. 어떻게 개선할까요?
나는 이미 업데이트 성능을 위해 status
필드에 색인을 가지고 있습니다.
checked
필드에서 색인을 생성하면 그다지 좋지 않은 업데이트 성능이 적용됩니다.
UPDATE가 SELECT 이상 발생합니다.
표
는 Innob 있습니다
더 많은 하드웨어 구매. 아니, 정말로 - 당신은 무언가를 얻을 수 없으므로, 트레이드 오프를하지 않으려는 경우 문제의 제약 조건을 변경해야합니다. 'memcache' 또는 더 빠른 머신을 사용하거나 데이터베이스 소프트웨어를 업그레이드하십시오. – Borealid
이것은 매우 기본적인 쿼리입니다. 'checked' 또는'error'에 대한 색인을 생성하지 않고 할 수있는 일은 없습니다. @Borealid 하드웨어 만 구입하면됩니다. –
인덱스를 추가하지 않고 리소스를 절약하는 것이 인덱스 추가의 리소스 비용보다 큰 경우 인덱스를 추가하십시오. 일반적으로 비용보다 인덱스를 추가하면 더 많은 이점이 있다는 것을 알게 될 것입니다. 전반적인 저축이 없다는 것을 계량화 할 수 없다면, 나는 업데이트에 대한 영향에 지나치게 '걱정'하기보다는 필요한 것을 추가하는 편에서 일반적으로 오류를 범할 것입니다. – MatBailie