어떻게 하면 이 문제를 해결할 수 있을 확장 문제와 부드러운 항목을 삭제하는?

StackOverflow https://stackoverflow.com/questions/1049700

  •  20-08-2019
  •  | 
  •  

문제

나는 데이터베이스는 대부분의 테이블이 삭제 깃발을 위한 테이블이 있습니다.그래서 시스템 부드러운 삭제품(그래서 그들은 더 이상 접근할 수 있지 않는 한하여 관리자는 예를 들어)

무엇이 걱정을 나서는 몇 년을 때,테이블은 훨씬 더 큰 것은 시스템의 전반적인 속도가 줄일 수 있습니다.

나는 무엇을 할 수 있는 대응하는 효과와 같습니다.

  • 나는 인덱스를 삭제합니까?
  • 나는 이동 삭제된 데이터를 동일 테이블을 삭제하고 다시면 삭제되지 않은?
  • 나는 확산을 통한 데이터 몇 MySQL 서버 시간?(성장에 기초)

나는 감사는 모든 제안 또는 이야기입니다.

업데이트:

그래서 분할에 열쇠가 될 것으로 보인다.그러나지 않을 것 파티션 단지 두 개를 만들""테이블,하나 삭제된 항목과 중 하나없이 삭제된 항목입니다.

그래서 시간이 지나면 삭제 된 파티션 성장할 것입니다 크고 가끔를 가져서 그것을 느린 것(속도가 느린 시간)

면 속도의 차이가 될 뭔가가 나에 대해 걱정해야?이후 나는 가장(모든 경우)으로 데이터의 키 값(일부로 검색할 수 있지만 느리게 이를 위해 설정)

도움이 되었습니까?

해결책

나는 테이블을 분할 할 것이다 DELETE 깃발.

삭제 된 행은 물리적으로 다른 곳에 보관되지만 SQL테이블의 관점은 동일하게 유지됩니다.

다른 팁

아, 그렇습니다. 삭제 필드를 색인하십시오. 당신은 항상 그것에 대해 쿼리 할 것입니다. 부모 ID와 같은 다른 필드가있는 복합 색인도 좋은 생각 일 수 있습니다.

틀림없이,이 결정을 만들 수 있는 나중에는 경우에만 성능 문제를 실제로 표시됩니다.그것은 아주 정도에 따라 달라집니다 얼마나 많은 행 추가 어떤 속도,당신의 상 사양 등.물론,추상화 수준에서의 응용 프로그램(및 제한 사항이 모든 라이브러리를 사용하는)결정하는 데 도움이됩니다 얼마나 어려운 이러한 변경이 될 것입니다.

만약 그것이 문제가되고,또는 당신은 어떤 것을 시작으로 분할에서 삭제 깃발 사이에 두 개의 테이블이나 보유하는 현재의 데이터 및 중 하나는 역사적/삭제된 데이터입니다.는 경우,당신이 말했듯이,"삭제"데이터 관리자가 사용할 수 있는 것이 합리적이라고 가정하는 것(에서 대부분의 응용 프로그램)의 총수 사용자는(여기서만 제한하여 관리자)이 충분하지 않습니다 원인 문제입니다.즉,귀하의 관리자는 기다릴 필요가 있습 조금만 더 찾을 때는 특정 테이블,하지만 당신의 사용자 기반(틀림없이 더 중요한 것에 대부분의 응용 프로그램)의 경험을 훨씬 적은 대기 시간이 길어집니다.의 경우 성능이 용납되고 관리자에 대한 가능성이 원하는 색인 user_id(또는 transaction_id 또는 어떤)분야에 액세스할 레코드를 삭제하여(나는 일반적으로 인덱스의 모든 분야에 의해 나는 테이블에 액세스하지만,일정 규모가할 수 있습 trade-offs 에 대해서는 인덱스를 가장 가치가).

하는 방법에 따라 데이터에 액세스할 수 있는 다른 간단한 사용할 수있다.는 경우는 관리자를 찾을 위해 특정 레코드는 대부분의 시간(으로 말하자면,읽고"역사"또는""로그는 사용자의 활동),수은 종종 가정은 최근 기록을 보일 것에서 더 자주 이전보다 기록이다.일부 Db 를 포함한 조정에 대한 옵션을 만드는 최근 기록을 쉽게 찾을 보다 더 오래된 기록을,하지만 당신은 그것을 찾기 위해 귀하의 특정 데이터베이스입니다.실패는 당신 수동으로 그것을 하십시오.가장 쉬운 방법은 것을 ancient_history 테이블을 포함하는 모든 레코드보다 나 n 일,주 또는 몇 개월에 따라 제약 및 의심되는 사용 패턴이 있습니다.새로운 데이터는 그런 다음 안에 살고 훨씬 작은 테이블.는 경우에도 관리가"찾아보기"모든 레코드를 검색하는 것보다 특정 하나에 의해 시작할 수 있습을 보여주는 첫 번째 n 일하고 있는 링크를 참조하는 모든 일들이지 않을 것을 찾을 찾고 있는(예를 들어,대부분의 온라인 금융 응용 프로그램할 수 있는 찾아보기 트랜잭션이지만 첫 번째 30 일의 기록하지 않는 한 당신이 요청하지 않습니다.)

희망을 방지할 수 있습 단계 더 나아가,그리고 분할에 user_id 또는 이러한 방식입니다.에 따라 규모의 애플리케이션의 나머지 부분야 할 수 있습니다 어쨌든 이렇게.지 않는 한 당신이 긍정적이 필요로 할 것이다,나는 강하게 사용하는 것이 좋 수직 분할 먼저(예를 들어,유지하 forum_posts 에는 별도의 기계보다 sales_records)으로,그것은 훨씬 쉽게 설치 및 유지 관리합니다.는 경우에 당신을 필요로 분할하에 user_id,사용하는 것이 좋 구글;-]

행운을 빕니다.BTW,나는 DBA 그래서 이와 곡물의 소금이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top