2016-10-26 4 views
0

2100 만 개의 레코드가있는 테이블이 하나있는 데이터베이스에서 작업하고 있습니다. 데이터베이스가 작성되고 삽입, 갱신 또는 h 제 조작이 더 이상 없을 때 데이터가 한 번로드됩니다. 웹 응용 프로그램은 select 문을 만들기 위해 데이터베이스에 액세스합니다.mysql 데이터베이스 테이블에서 여러 개의 동시 선택

현재 서버가 응답을 받기 위해 요청 당 25 초가 소요됩니다. 그러나 여러 클라이언트가 동시 요청을하면 응답 시간이 크게 늘어납니다. 이 프로세스를 빠르게하는 방법이 있습니까?

고정 된 최대 행을 가진 InnoDB 대신 MyISAM을 사용 중이며 검색된 필드를 기준으로 색인이 생성되었습니다.

+0

누군가가 upvotes 제안 "이 질문은 연구 노력을 보여줍니다, 그것은 유용하고 명확하다"... 내가 Netflix를 보러 갈 것입니다 – Drew

+0

쿼리 성능을 향상시키기 위해 테이블이 적절하게 색인되어 있는지 확인하십시오. 동시 쿼리가 많으면 서버가 한 번에 너무 많은 작업 만 수행 할 수 있으므로 자연스럽게 속도가 느려집니다. – Barmar

답변

0

데이터가 업데이트/삽입/삭제되지 않으면 테이블을 읽는 동안 데이터베이스를 잠그지 않도록 데이터베이스에 알리는 것이 좋습니다. 도움이된다면, 워드 프로세서에서

더 읽기 :

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ; 
SELECT * FROM TABLE_NAME ; 
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ; 

(http://itecsoftware.com/with-nolock-table-hint-equivalent-for-mysql REF :) :

은 MYSQL의 경우이의 라인을 따라 뭔가 것 같다

https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html

TSQL에 상응하는 내용으로 google을 추가해야하는 경우 도움이 될 수 있습니다.

SELECT * FROM TABLE WITH (nolock) 

성능이 향상 될 수 있습니다. 다른 의견에서 언급했듯이 좋은 인덱싱을 사용하면 도움이 될 수 있습니다. 가능하다면 테이블을 추가하여 상황을 분산시켜 모든 데이터에 액세스하지 않아도됩니다.

참고 사항; 테이블을 잠그면 다른 사용자가 사용하는 동안 데이터를 변경하지 못하게됩니다. 삽입/삭제/업데이트가 많은 테이블을 잠그지 않으면 선택 항목에서 동일한 데이터 (하드 드라이브에서 이동 한 것과 같은), 누락 된 열이있는 행 등 여러 행을 반환 할 수 있습니다.

요청에 대해 선택하는 표가 하나씩 있으므로 모두 표를 잠그고 잠금 해제합니다. 업데이트, 삽입 또는 삭제를 수행하지 않으면 데이터가 변경되지 않아야하므로 잠금을 지키면됩니다.

관련 문제