2010-11-30 8 views
0

나는 퀴즈를 만들고 있는데, 많은 선수들을 기대하고있다. 퀴즈는 고정 된 수의 질문을 가지고 있습니다. 퀴즈 시스템은 MySql 데이터베이스에서 개별 질문을 하나씩 가져 와서 사용자에게 표시 할 수 있습니다. 또는 다른 방법으로 로그인 할 때 모든 질문을 가져 와서 하나씩 표시 할 수 있습니다. 두 번째 방법은 많은 수의 SQL 쿼리로 인해 서버로드를 줄이는 데 큰 도움이됩니까? 여기에서 나는 동시에 500-600 명의 사용자가 게임을하는 것에 대해 말하고 있습니다.어느 것이 더 낫습니다 : 많은 SQL 쿼리 또는 하나의 SQL 데이터에 많은 데이터가 있습니까?

답변

3

확실히 알 수있는 유일한 방법은 두 가지 방법 모두를 벤치마킹하는 것입니다.

저는 가치가있는 점에 대해 많은 수의 작은 SQL 쿼리를 적은 수의 큰 쿼리로 대체하여 성능이 중요한 코드 조각의 처리량을 최근 10 배로 향상 시켰습니다.

0

인덱스가 잘 설정된 데이터베이스는 단일 쿼리로 전혀 문제가 없어야하는데, 이것이 내가 원하는 것입니다. 보너스 : 작은 쿼리는 서버의 쿼리 캐시에 남아 있으므로 다시 요청할 경우 더 빨리 전달됩니다.

+0

저는 PHP를 사용하고 있으므로 SESSION 변수에 질문을 저장하려고합니다. 당신이 말하는 쿼리 캐시 란 무엇입니까? 미안하지만, 나는 독학 프로그래머이고 기술 전문 용어를 모르는 사람입니다. – aakashbhowmick

+0

죄송합니다. 내가 언급 한 "쿼리 캐시"는 MySQL 서버의 내부 메커니즘입니다. 많이 질문하는 질문 (예 : 검색어)은 캐시됩니다. –

0

숫자에 따라 다릅니다. 모든 질문을 표시하고 있습니까, 아니면 1,000 개 중 5 개를 무작위로 선택합니까?

질문 수가 적 으면 단일 쿼리로 페치하는 것이 좋습니다.

질문 수가 많으면 단일 쿼리로 페치하면 메모리가 많이 사용되므로 하나씩 페치하는 것이 좋습니다.

+0

단지 15 개의 쿼리와 아니요, 무작위로 가져 오지 않을 것입니다. – aakashbhowmick

+0

그렇다면 단 하나의 쿼리로 페치하는 것이 더 낫습니다. 일반적으로 데이터베이스는 각 쿼리를 분석하고 실행 계획을 준비해야하므로 데이터베이스가 15 번 대신 1 회 수행하는 것이 좋습니다. – Arsen7

0

질문의 수가 적은 경우 어느 쪽이든 약간의 차이가 있습니다. 또한 질문 수가 많으면 앞뒤로 지나치게 많은 네트워크 대기 시간을 피할 수 있으므로 단일 쿼리로 가져 오는 것이 더 효율적입니다.

0

제외 15 이외 을 선택하십시오. 각 사용자의 대답은 개별 검색어입니다. DB 서버의 최대 이점은 쿼리 2 회분 (모든 사용자에 대해 1 회 선택 및 1 회 삽입)입니다.

이론상 이론상 초당 500-600 개의 인서트가 제공 될 수 있습니다. 실제로 삽입이 적습니다.

어쨌든 삽입 잠금에 대한 오버 헤드가 있으므로 많은 수의 쿼리를 피해야합니다.

관련 문제