2010-06-11 3 views
0

내 사이트에는 데이터베이스에 저장된 많은 수신 검색어가있어 내 웹 사이트에 최근 검색어를 표시합니다. 높은 검색어로 인해 데이터베이스가 더 커졌습니다. 그래서 내가 원하는 것은 데이터베이스의 최근 쿼리 만 10 개의 레코드로 유지해야한다는 것입니다. 이렇게하면 데이터베이스가 작아지고 쿼리가 빨라집니다.특정 데이터를 유지하여 테이블의 레코드를 삭제합니까?

들어오는 쿼리를 데이터베이스에 저장할 수 있지만 테이블에서 초과/오래된 데이터를 제한하거나 삭제하는 방법을 알지 못합니다.

어떤 도움 ??

잘 나는 정확히으로 테이블 TableNameArchive을 보관하기 위해 당신은 CRON (예. 하루에 한 번)에 의해 시작됩니다 PHP 스크립트를 작성하고 기본 테이블 TableName에서 일부 데이터를 이동해야 PHP와 MySQL

답변

0

을 사용하고 있습니다 같은 구조.

INSERT INTO TableNameArchive 
SELECT * FROM TableName WHERE data < '2010-06-01' //of course you should provide here your conditions 

가 옆 TableName에서 이전 기록을 삭제해야합니다 : 같은 스크립트 내부 SQL은해야 보이는.

1

테이블에 타임 스탬프 열이 있으면 (또는 추가 할 수있는 자유가 있기를 바랍니다). AFAIK, 테이블에 데이터를 추가 할 때 명시 적으로 타임 스탬프를 추가해야합니다. 그럼 당신의 라인을 따라 뭔가를 할 수 있습니다

DELETE FROM tablename WHERE timestamp < '<a date two days in the past, or whatever'>;

당신은 아마 오히려 당신이 테이블에 추가 할 때마다보다, 주기적으로이 작업을 수행 할 것입니다.

줄을 추가 할 때마다 테이블의 크기를 확인하고 가장 오래된 레코드를 삭제하여 최근 10 개의 레코드로 크기를 제한 할 수 있다고 가정합니다 (다시 추가 한 타임 스탬프 열을 사용하여).) 새 레코드를 추가하면 너무 커집니다.

Falkon의 답변은 좋습니다. - 포렌식 데이터에 대한 필요에 따라 아카이브를 테이블에 보관하고 싶지는 않을 수도 있습니다. 또한 mysqldump를 사용하여 데이터베이스의 백업 (파일 이름에 날짜 포함)을 작성한 후 초과 레코드를 삭제하는 cron 작업을 설정할 수 있습니다. 이렇게하면 이전 데이터의 백업을 쉽게 만들거나 도구를 사용하여 데이터베이스를 검색 할 수 있으며 데이터베이스는 작게 유지됩니다.

관련 문제