2014-02-28 3 views
0

MySQL에서 멀티 세트 ("가방")를 구현하는 표준 방법을 찾고 있습니다. 이 다중 집합에 포함될 수있는 값은 문자열뿐입니다.멀티 세트를 구현하는 표준 방법은 무엇입니까?

그 이유는 계산입니다. 나는 미리 정의 할 수없는 사건들의 목록을 가지고 있으며, 나는 그들의 사건을 세고 싶다. 예를 들어 파이썬에서는 Counter을 통해이 작업을 수행 할 수 있습니다.

이전에 나는 약 sets in MySQL에 대한 질문을했습니다; 지금까지 찾은 최고의 솔루션은 TEXT 데이터 형식을 사용하여 데이터베이스에 쉼표로 구분 된 문자열을 넣은 다음 FIND_IN_SET을 사용하여 요소가 집합에 있는지 확인합니다. 그러나이 솔루션은 텍스트 필드에 문자열을 천 번 저장할 때 멀티 세트에 좋지 않습니다. 다음을 계산하면 효율성이 떨어집니다.

사용 사례는 다음과 같습니다. 이벤트가 발생할 때마다 주어진 행과 관련된 Python 스크립트를 실행하는 동안 데이터베이스에 액세스하여 해당 이벤트를 데이터베이스의 각 행에 추가하려고합니다. 결국 각 행에서 각 이벤트의 발생 횟수를 계산하려고합니다. 데이터 삽입을 효율적으로 수행하는 것이 더 중요합니다 (최종 계산과 비교).

편집

내 원래 데이터 테이블 행의 수천을 포함하고, 각각은 "MULTISET 필드"(어떤 식 으로든)을 가져야한다. 그러한 다중 집합은 각각 고유 값을 너무 많이 포함하지 않을 수도 있지만 (예 : 20 미만), 그러한 값은 다중 집합에서 여러 번 (예 : 500 회 이상) 나타날 수 있습니다. 따라서 각 값의 문자열 (또는 다른 표현)은 나중에 계산되기를 기다리는 자체적으로 (내 이해에 비효율적 일 수 있습니다.) 예를 들어, 임의의 (원래) 행의 이벤트가 행을 만드는 다른 테이블은 매우 빠르게 커집니다 (수백만 행).

답변

2

을 감안할 때이 당신의 기존 테이블 :

create table table1(thekey int primary key, random_info varchar(10)) 

이벤트 테이블 만들기 : 이벤트

insert into table1_event values(<a key>, 'the event', 1) 
    on duplicate key update counter=counter+1 

요약 :

select table1.thekey, table1_event.event, table1_event.counter 
from table1 left outer join table1_event on table1.thekey=table1_event.thekey 
각 이벤트에 대한

create table table1_event(thekey int not null, event varchar(100) not null, 
        counter int, primary key(thekey, event)) 

변경된 질문과 답변을 포스터에서 수정 하시려면

+0

아마도 'group1 by table1_event.event'을 (를) 사용 하시겠습니까? 어쨌든, 이것은 실제로 내 질문에 대한 해결책이 될 수 있습니다. 그러나 내 원래 행에 ~ 100000 개의 이벤트가 포함될 수 있으며 원래 행이 수천 개일 수 있습니다. 이는 비효율적이라고 들립니다. 내 질문을 수정하겠습니다. – Bach

+0

답변이 업데이트되었습니다. 감사합니다. – Bach

관련 문제