2011-05-01 6 views
0

저는 현재 Java/DB2 백엔드가있는 웹 응용 프로그램에서 일하는 주니어 개발자이며 매우 천천히 실행되는 SQL 쿼리가 있습니다. 데이터베이스가 현재 최적화되어 있지 않으므로 개선의 여지가 있습니다. 문제는 내가이 경험이 없으며 아무도 나를 도울 수 없다는 것입니다. 복수 선택 조건을 기반으로 선택 쿼리를 최적화하십시오.

SomeTableName 
MyPkey 
ColOne 
ColTwo 
ColThree 
ColFour 
ColFive 

나는 이런 쿼리에 대한 데이터베이스를 최적화하는 방법을 알아 내려고 노력했다 :

SELECT * FROM SomeTableName WHERE ColOne = 'some value' 
SELECT * FROM SomeTableName WHERE ColOne = 'some value' AND ColTwo = 'another' 
SELECT * FROM SomeTableName WHERE ColFive = 11 AND ColThree = 'hello world' 
SELECT * FROM SomeTableName WHERE ColOne = 'hi' AND ColTwo = 'val1' AND ColThree = 'val2' AND ColFour = 'val3' AND ColFive = 'val4' 

내가의 SELECT 문은 다른 열 조합이 WHERE 조건을 가지고있다 묘사하기 위해 노력하고있어 그리고 가치와 나는 이런 식으로 쿼리를 최적화하는 방법을 모르겠습니다.

어떤 조언이 필요합니까?

EDIT : DB2가 자체 최적화를 추가했는지는 모르지만 모든 열에는 인덱스가 설정되어 있지 않습니다.

+0

처음에는 Java 또는 DB2에 대해 잘 모르기는하지만 테이블 정의가 필요합니다. 따라서 세부 사항을 도울 수는 없습니다. 대부분의 SQL 상황에서 이와 같은 쿼리는 적절한 인덱스가 있는지 확인하여 크게 향상시킬 수 있습니다. – Henry

+0

데이터베이스에 인덱스가 없습니다. 이전에 하나를 만들려고했지만 어떻게 설정해야할지 생각했습니다 (즉, 열당 하나의 인덱스를 사용해야합니까? 아니면 하나의 인덱스에 여러 개의 열을 사용해야합니까?) –

+0

당신이 할 수있는 가장 단순한 작업은 DB. 속도가 느린 경우 인덱스를 테이블에 추가해야합니다. 그들 없이는 매번 전체 테이블 스캔을 수행하고 있습니다. –

답변

0

데이터베이스에서 인덱스를 사용해야합니다. 그들은 삽입과 업데이트를 더 비싸게 만들지 만 쿼리가 훨씬 빠르게 실행되므로 전체적으로 큰 승리를 거둘 수 있습니다. 인덱스는 많은 수의 값을 가진 열 (예 : 성별 열에는 그리 많지 않음)에 가장 효과적입니다. 어디서 조건을 참조하는 열에 효과적입니다. 인덱스를 시도 할 때 데이터베이스의 쿼리 최적화 프로그램이 SQL EXPLAIN 동사 또는 db2expln 같은 도구를 사용하여 인덱스를 사용하는지 확인하십시오.

0

예를 들어, 이미 colOne을 인덱싱하여 몇 가지 성능을 얻은 것처럼 보입니다. 기본적으로 사용할 인덱스와 같은 순서로 열을 사용하십시오.

0

(colOne, colTwo, colThree, colFour, colFive)에 대한 색인을 작성하면 상당한 성능 향상을 얻을 수 있습니다. 검색어 1, 2 및 4 모두 사용됩니다.