2009-05-08 2 views
2

하나의 테이블에서 아주 간단한 쿼리 (세 개는 조건, 두 개는 같음)가 있고 MySQL 쿼리 브라우저에서는 쿼리가 실행되는 데 0.5 초도 채 걸리지 않아 8300 개의 레코드가 반환됩니다. MySQL 데이터 커넥터 (실제로는 OLEDB 래퍼)를 사용하여 정확히 동일한 쿼리를 실행하면 약 35 초가 걸립니다.MySQL 데이터 커넥터가 MySQL Query Browser보다 훨씬 오래 걸리는 이유는 무엇입니까?

사용중인 엔진이 MyISAM입니다 (문제가있는 경우). Visual Studio 2008을 사용하고 있습니다. 편집 : MySQL 데이터 커넥터 5.2.5를 사용하여. 편집, 편집 : MySQL 데이터 커넥터 6.0.3 (최신 버전)으로 전환하면 29 초 동안 줄어 듭니다.

쿼리는 다음과 같습니다

select drh_data.reading_time, drh_data.raw_value, drh_data.float_value, drh_data.data_quality 
from drh_data 
where drh_data.site_id=202 
and drh_data.device_id=7 
and reading_time between '2009-04-08 11:15:01' and '2009-05-08 11:15:02' 
order by drh_data.reading_time desc; 

어떤 아이디어?

업데이트 : 마침내 CPU 사용량을 확인할 때 (응답자가 제안한대로) 50 % CPU 시간이 내 응용 프로그램에서 사용되는 것으로 나타났습니다. 20 (초) 동안 MySQL을 실행하는 VirtualPC 상자 (CentOS)는 0 % 였으므로 문제는 모두 클라이언트 측에서 발생합니다. 또한 쿼리에 대한 설명을 실행하여 다음과 같이 표시했습니다.

id select_type table type possible_keys        key        key_len  ref  rows Extra 
1 SIMPLE drh_data range PRIMARY,idx_site_device_reading_receive  idx_site_device_reading_receive 11     7674 Using where 

여기에서 도청했습니다. 누구든지이 문제를 해결할 수있는 아이디어가 있습니까? LIMIT를 통해 셀렉트를 해산 시키려하고 있습니다.하지만 그렇게해야한다고 생각하지 않습니다.

+0

오, 좋았어. 이 문제는 MySQL 쿼리 문제가 아닌 DataGridView 문제로 드러났습니다. AllCells에 AutoSizeRowsMode를 설정했기 때문에 DataGridView에서 행의 각 셀의 크기를 조정해야했기 때문에로드하는 데 훨씬 오래 걸렸습니다. 이제는 4 초가되었습니다. 이것은 훨씬 합리적인 것입니다. –

답변

1

나는 그 초 (CPU 사용량)에 대한 작업을 확인하고 싶습니다. mysql입니까? 아니면 코드 또는 다른 것입니까? EXPLAIN을 사용하여 다른 사례에서 어떤 일이 일어나고 있는지 비교하고 비교할 수도 있습니다.

+0

마침내 테스트 할 수 있습니다 : CPU 사용률이 전적으로 내 응용 프로그램에 50 %입니다. (실제로 동일한 상자의 VirtualPC에서 MySQL을 실행하기 때문에 열심히 노력하고 있는지 확인할 수 있습니다. '전혀). Explain은 SIMPLE select_type이며, 사용하는 키이고 Extra 열은 "Using Where"를 보여줍니다. 그래도 지금 뭘 더 봐야할지 모르겠다. –

+0

이 질문에 대한 답은 정확하지 않지만 정확한 방향으로 이끌어주었습니다. –

1

ADO.NET과 SQL Server 쿼리 분석기를 사용하기 전에이 문제가 발생했습니다. 쿼리 분석기에서 쿼리를 실행했을 때 쿼리가 두 번째로 실행되었습니다. 웹 애플리케이션에서 쿼리를 실행했을 때 2 분 이상 걸렸습니다. 어떤 이유로 든 테이블에 인덱스를 적용하면 앱과 데이터베이스 간의 데이터 연결 속도가 빨라지는 것 같습니다.

MySQl과 SQL Server의 운영상의 차이점을 알 수는 없지만 실행중인 캐시가 가득 차서 모든 캐시되지 않은 실행 계획에서 실행 속도가 느려졌습니다. 캐시를 지우는 주간 작업을 구현했습니다.

+0

내가 일하러 돌아올 때 그것을 확인해 보겠습니다. 아마도 실행 캐시 (select 중에 SQL_NO_CACHE와 같은 것)에 충돌하지 않도록 지시하는 방법이 있을까요? –

+0

SQL_NO_CACHE를 수행하면 약 14 초가됩니다. 그러나 더 좋지만 여전히 좋지는 않습니다. –