programing

multicolumn unique key mysql insert

padding 2023. 10. 15. 17:05
반응형

multicolumn unique key mysql insert

나는 mysql 데이터베이스를 가지고 있고 다음과 같은 테이블 구조를 가지고 있습니다.

CREATE TABLE `user_session_log` (
 `stat_id` int(8) NOT NULL AUTO_INCREMENT,
 `metric` tinyint(1) NOT NULL DEFAULT '0',
 `platform` tinyint(1) NOT NULL DEFAULT '0',
 `page_id` varchar(128) DEFAULT '_empty_',
 `target_date` date DEFAULT NULL,
 `country` varchar(2) DEFAULT NULL COMMENT 'ISO 3166 country code (2 symbols)',
 `amount` int(100) NOT NULL DEFAULT '0.000000' COMMENT 'counter or amount',
 `unique_key` varchar(180) DEFAULT NULL COMMENT 'Optional unique identifier',
 `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`stat_id`),
 UNIQUE KEY `unique_key` (`unique_key`) USING BTREE,
 KEY `target_date` (`target_date`)
) ENGINE=InnoDB AUTO_INCREMENT=21657473 DEFAULT CHARSET=utf8

제가 이루고자 하는 것은 날짜, page_id, country를 기준으로 활성 세션/유일 사용자를 기록하는 것입니다.현재 저는 unique_key로 여러 개의 삽입문을 생성하고 page_id와 날짜를 고유키에 추가하여 구매함으로써 이를 달성할 수 있지만, 저는 조금 다른 것을 원합니다.논리는 다음과 같습니다. unique_key( unique- semi 사용자 ID)의 새 행을 삽입합니다. 여기서 국가 = 이것, 날짜 = 이것, page_id = 이것입니다.해당 정보가 있는 행(동일 page_id, unique_key, 날짜+국가)이 이미 있는 경우 - 금액 = (금액) + 1 ; (session) 업데이트그래서 다음과 같은 검색을 할 수 있었습니다.

SELECT sum(amount) WHERE page_id = "something" AND target_date = "2018-12-21" 이렇게 하면 많은 세션이 주어질 겁니다

SELECT COUNT(*) WHERE page_id = "something" AND target_date = "2018-12-21" 그러면 해당 pagee_id에서 해당 날짜에 활성 사용자가 다수 발생할 수 있습니다.

SELECT COUNT(*) WHERE target_date = "2018-12-21" 그 날 총 사용자 수 결과를 얻을 수 있습니다.고유 지수에 대해서는 알고 있지만, 제가 찾고 있는 결과가 나올까요?


편집, 샘플 삽입:INSERT INTO `user_session_log` (`platform`,`page_id`,`target_date`,`country`,`amount`,`unique_key`,`created`,`modified`) VALUES ('1','page_id_54','2018-10-08','US',1,'ea3d0ce0406a838d9fd31df2e2ec8085',NOW(),NOW()) ON DUPLICATE KEY UPDATE `amount` = (amount) +1, `modified` = NOW();그리고 표는 동일한 고유_키 + 날짜 + 국가 + 플랫폼 + page_id가 있는지 여부를 기준으로 중복 여부를 알아야 하며, 그렇지 않으면 새 행을 삽입하기만 하면 됩니다.지금은 다른 메트릭과 이미 생성된 날짜 + page_id를 포함한 unique_key를 생성한 후 해시함으로써 다르게 작업하고 있습니다.이렇게 하면 다른 고유 사용자를 하루 단위로 필터링할 수 있지만 고유 사용자가 가진 세션의 양이나 소프트웨어를 사용하는 기간 등은 필터링할 수 없습니다.

먼저 다음과 같이 고유해야 하는 모든 열에 고유 인덱스를 만듭니다.

ALTER TABLE user_session_log ADD UNIQUE INDEX idx_multi_column  ON user_session_log (unique_key, date, country, platform, page_id); 

그런 다음 INSERT...를 사용할 수 있습니다. 삽입/업데이트할 키 업데이트 쿼리를 복제합니다.

언급URL : https://stackoverflow.com/questions/52697599/multicolumn-unique-key-mysql-insert

반응형