Laravel 소프트 삭제 가능한 MySQL/MariaDB 파티션(삭제된_at IS NULL 대 datetime 값)
Laravel Permunder 소프트 삭제 가능(소프트 삭제 가능이라고도 함) 테이블은 다음과 같습니다.
id | value1 | value2 | ... | valueN | deleted_at
그리고.deleted_at될 것이다null활성 항목의 경우 및 삭제된 항목의 경우 날짜/시간 값입니다.
InnoDB 테이블을 활성 레코드와 삭제 레코드로 분할할 수 있습니까?
(모든 null 값에 대한 파티션과 실제 값에 대한 다른 파티션을 의미합니다.
업데이트: 약간의 조사 끝에 다음과 같은 파티션을 만들었습니다.
ALTER TABLE `listings`
PARTITION BY RANGE( UNIX_TIMESTAMP(deleted_at) )
SUBPARTITION BY HASH( user_id )
SUBPARTITIONS 40
(
PARTITION active VALUES LESS THAN (0), -- null values (not deleted rows) will go here
PARTITION deleted VALUES LESS THAN MAXVALUE -- non-null values (deleted rows) will go here
);
업데이트 2: 사용자는 소프트 삭제되지 않습니다.목록은 그럴 것입니다.그들은 결국 활성 목록보다 삭제된 목록을 더 많이 축적할 것입니다.사용자는 임의의 열에 있는 필터의 숫자를 정의하고 결합할 수 있습니다(Excel 방식).user_id그리고.deleted_at < 0(이 경우 파티션을 잘라냅니다.IS NULL에 따르면, 하지 않을 것입니다.EXPLAIN PARTITIONS)는 항상 쿼리에 표시됩니다.파티션을 분할하면 항상 검사할 행 수가 줄어들고, 때로는 쿼리가 나머지 인덱스 중 하나를 사용하여 이점을 얻을 수 있다고 생각했습니다.제가 이것에 대해 옳았는지 확신할 수 없습니다.
PARTITIONing성능에 거의 도움이 되지 않습니다.
이것.
WHERE deleted_at IS NULL
AND ...
복합 지수의 이점:
INDEX(deleted_at, ...)
"..." 부품이 어떤 식으로든 일치하는 곳.
(다음과 같은 이유로 작동합니다.IS NULL와 같이 작동합니다.=즉, 그러한 지수는 다음과 같이 말할 때 도움이 되지 않습니다.deleted_at IS NOT NULL그리고 그런 것들은 매우 유용하지 않을 것입니다.deleted_at BETWEEN ... AND ....)
몇 가지 실제 질문을 보여주십시오. 공유할 추가 팁이 있을 수 있습니다.
파티션을 사용하지 않는 경우 인덱스:
PRIMARY KEY(user_id, id), -- perfect for finding one user
INDEX(id) -- to keep auto_increment happy
한다면user_id독특합니다, 제거하는 것.id완전히.
삭제된 사용자를 모두 찾거나 검색해야 합니까?
언급URL : https://stackoverflow.com/questions/62350869/mysql-mariadb-partitioning-for-laravel-softdeleteable-deleted-at-is-null-vs-d
'programing' 카테고리의 다른 글
| Spring MVC는 여러 사용자를 어떻게 처리합니까? (0) | 2023.07.31 |
|---|---|
| Python에서 범위 차단 (0) | 2023.07.31 |
| 목록의 모든 요소 쌍에 대한 작업 (0) | 2023.07.31 |
| 오라클에서 두 표를 열별로 비교하는 방법 (0) | 2023.07.31 |
| MySQL 날짜/시간을 타임스탬프로 변환 (0) | 2023.07.31 |