소셜 네트워크 웹 사이트에서 작업 중이므로 사용자가 많이되기를 바랍니다. 모든 사용자에 대해 태그 (키 | 카운터)를 저장해야하며 1) 큰 테이블 대 2) 1 개의 큰 테이블 대 3) 큰 테이블을 분할하는 것이 더 나은지 궁금합니다.mysql 성능 하나의 큰 테이블 대 많은 테이블
1)이 많은 테이블을 구현 한 예입니다
테이블 userid_tags (모든 사용자가
key | counter
----- ---------
tag1 | 3
tag2 | 1
tag3 | 10
Query 1: SELECT * FROM userid_tags WHERE key='tag1'
Query 2: SELECT * FROM userid_tags
2) 단일 테이블 구현) 자신의 테이블의있다 :
표 태그
01 23,516,key | counter | user_id
----- ------------------
tag1 | 3 | 20022
tag2 | 1 | 20022
tag2 | 10 | 31234
Query 1: SELECT * FROM userid_tags WHERE key='tag1' AND user_id='20022'
Query 2: SELECT * FROM userid_tags AND user_id='20022'
3) 스플릿 테이블 구현
테이블 1000_tags (USER_ID 1 내지 1000)
key | counter | user_id
----- ------------------
tag1 | 3 | 122
tag2 | 1 | 122
tag2 | 10 | 734
테이블 (USER_ID 20000)에서 21,000에
key | counter | user_id
----- ------------------
tag1 | 3 | 20022
tag2 | 1 | 20022
tag2 | 10 | 20234
Query 1: SELECT * FROM userid_tags WHERE key='tag1' AND user_id='20022'
Query 2: SELECT * FROM userid_tags AND user_id='20022'
을 21000_tags
3) 에 대한 질문 좋은 분할 인덱스가 무엇입니까? 나는 instict 다음 1000 (사용자)를 사용했습니다
정규화 시점에서 볼 때 두 번째 요소 만 실제로 의미가 있습니다. 성능 POV에서 ... 음 ... 당신의 테스트는 뭐래? : P 만약 당신이 대답 할 수 없다면, 당신은 * 이것에 대해 "최적화"에 대해 * 생각할 준비조차되지 않았습니다. – cHao
디자인 수준에서 이러한 유형의 파티셔닝을 수행하지 마십시오. 기껏해야 반 패턴입니다. 코드 복잡성이 증가하고 성능이 저하됩니다. DB 엔진이 그 일을하도록하십시오. –
@cHao 아직 테스트를 수행하지 않았지만 구현하기 전에 다른 개발자의 의견을 알고 싶습니다. 빠른 작업이 아닙니다. – Mike