2013-07-22 3 views
0

다른 조건으로 검색 작업을 수행하려고합니다.검색 쿼리 성능?

예를 들면.

Select * from test where field1="temp"; 

반환 0 레코드를 다음 등

Select * from test where field3="temp"; 

하고 확인하는 경우 반환 0 레코드가 다음

Select * from test where field2="temp"; 

를 확인합니다. 쿼리 필드가 변경 될 때마다 결과 세트가 비어 있지 않으면 결과 세트를 리턴하십시오.

좋은 성능으로이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

  1. 각 조건을 확인하고 돌아 오는 MySQL 함수를 만듭니다.

  2. JAVA 소스 코드에서 확인 하시겠습니까? (나에게는 좋은 생각이 아니다.)

  3. 단일 선택 쿼리에서이 작업을 수행하는 다른 방법이 있습니까?

  4. 다른 제안 사항이 있습니까? 나는 기본적인 JDBC 서블릿과 MySql을 사용하고있다.

+2

매우 비정상적인 데이터 구조가있는 것 같습니다. – eggyal

+0

확인할 필드가 몇 개 있습니까? 테이블에 몇 행이 있습니까? – mthmulders

+0

우선 순위 검색의 한 종류인데, 예를 들어 쿼리 문자열은 "Temp"이고 First_name, Last_name, addrss, city 등과 같은 필드에 쿼리하지만 우선 순위는 있습니다. 최대 10 개의 필드가 있습니다. 그리고 행은 약 10K입니다 –

답변

0

이 작업을 수행하는 것은 나에게 좋지 않습니다.

private List<Object> retrieveData() { 
    String[] fields = {"field1","field2"}; 
    String value = "foo"; 
    List<Object> results; 
    for(String field : fields){ 
     results = getResults(field, value); 
     if(!results.isEmpty()){ 
      break; 
     } 
    } 
    return results; 
} 

public List<Object> getResults(String field, String value){ 
    // Use Prepared statement here 
    List<Object> results = "Select * from test where " + field + " = " + value; 
    return results; 
} 

동일한 through 쿼리를 수행하는 것에 비해 성능이 떨어지는 지 확실하지 않습니다. SQL CASE를 사용

1

시도 :

CASE case_value 
    WHEN when_value THEN statement_list 
    [WHEN when_value THEN statement_list] ... 
    [ELSE statement_list] 
END CASE 

나 또한

http://dev.mysql.com/doc/refman/5.0/en/case.html

CASE 
    WHEN search_condition THEN statement_list 
    [WHEN search_condition THEN statement_list] ... 
    [ELSE statement_list] 
END CASE 

, 저장 프로 시저이 좋은 것 할.

+2

하지만 한 번에 하나의 열에 대해 작동합니까? 잠재적으로 많은 컬럼이 관련되어 있다는 것이 어렵습니다. – mthmulders

+0

@mthmulders 필요 없으며 다른 형식도 있습니다. –