MySQL 스키마, 어느 쪽이 성능이 더 우수합니까?M-N 관계를 지정하거나 모든 관련 ID를 문자열로 저장하시겠습니까?
단어 시험을 위해 MySQL DB를 설계하고 있습니다.
표:users
,words
,results
참가자는 자신이 알고 있는 단어를 모두 선택한다.모든 검사는 서로 다릅니다. 즉, 데이터베이스에서 무작위로 시험이 생성됩니다.에 관한 것이다. 350
모든 시험에 대한 단어.
이제 모든 시험에 대한 결과와 참가자가 선택한 모든 단어를 저장하려고 합니다.보시는 바와 같이ids
저장할 모든 시험에 대해 (단어)!내 머릿속에는 두 가지 방법이 있다.
1 - 에서의 다대다result_word
테이블(모든 검사에 대해 최대 350개 행):
result_id | word_id
--------------------
1 | 33
1 | 12
. | .
. | .
2-열에서 문자열로 지정answered_ids
에results
테이블:
id | answered_ids
-------------------------
1 | "12,33,..."
결과 1의 모든 ID:answered_ids
:"33,12,..."
그리고 내가 필요할 때,explode()
php로!
첫 번째 방법은 매우 빠르게 DB에 수천 개의 행이 될 수 있기 때문에 두 번째 방법이 더 낫다고 생각합니다.내 말이 맞니?아니면 더 좋은 방법이 있을까요?
갱신:
이 테스트에서 사용자는 다음 목록을 볼 수 있습니다.English words
에서 무작위로 선택되다words
테이블 말고는 아무것도 없어!사용자는 자신이 의미를 안다고 생각하는 모든 단어를 클릭한다!또 하나 있어요.fake_words
50단어 랜덤 테이블이 선택됩니다.actual words
사용자가 가짜 단어를 3번 이상 클릭하면 테스트가 실패합니다.최종 결과는 사용자에게 그가 얼마나 많은 어휘력을 가지고 있는지 알려줄 것입니다.
이 앱을 만들고 있습니다.VueJs2
시험 결과 외에 사용자가 선택한 모든 단어를 저장하고 싶습니다.그리고 한 사용자가 결과를 보고 싶을 때, 그는 그가 클릭한 모든 단어를 볼 수 있습니다!
우려되는 사항은 다음과 같습니다.검사 횟수가 많아지면 문제가 될까요?예를 들어 5000.또한 이 앱의 구현 방법에 대한 일반적인 제안을 해주시면 감사하겠습니다.
MySQL을 비롯한 최신 DBMS는 테이블에서 수백만 개의 행을 처리할 수 있습니다.당신은 아주 적은 양의 데이터에 대해 말하고 있습니다.따라서 솔루션 1을 사용해야 합니다.
- 이를 통해 PHP 코드를 수정할 필요 없이 자동으로 시험을 확대 또는 축소할 수 있습니다.
- 데이터베이스의 텍스트 필드는 길이가 제한되므로 모든 필드를 입력할 수 없습니다.
word_id
필요한 것들로요. - SQL 쿼리를 구성하여 사람들이 알고 있는 단어 수의 평균 등 데이터를 사용하여 흥미로운 작업을 수행할 수 있습니다. 이를 위해 PHP 코드를 작성하지 않아도 됩니다.
는 여러 오브젝트와 할 수 할 수 .JOIN
운용을 실시합니다.나는 Use The Index, Luke를 추천한다.이것은 황동태크 분석과 몇 가지 다른 DBMS의 예시를 제공하고 데이터를 가장 잘 인덱싱하는 방법을 제공한다.
언급URL : https://stackoverflow.com/questions/45128755/mysql-schema-which-way-is-more-performant-m-n-relation-or-save-all-related-ids
'sourcecode' 카테고리의 다른 글
1개의 코어 전체를 단일 프로세스 전용 (0) | 2022.08.14 |
---|---|
java.displaces를 클릭합니다.XMLGregorian 캘린더 날짜 (0) | 2022.08.14 |
nuxt.js에 Vue 패키지를 설치하는 방법 (0) | 2022.08.14 |
Nuxt는 mixin 내의 vuex 스토어에 액세스합니다. (0) | 2022.08.13 |
입력에 초점을 맞추고 @click을 하면 Vue.js 입력 제안 표시 (0) | 2022.08.13 |