내 응용 프로그램에 이처럼 많은 쿼리가 있습니다.쿼리를 최적화하는 SQL 인덱스
SELECT DISTINCT STREET_NUMBER, STREET_NAME
FROM leads
WHERE STREET_NAME || ',' || SUBURB IN (select VAL from streetFilter)
AND USER_ID IN (%@)
AND TIMESTAMP >= '%@'
AND TIMESTAMP <= '%@'
AND GEO_LAT <> '0'
ORDER BY STREET_NAME, CAST(`STREET_NUMBER` AS SIGNED) ASC
내 질문은 어떤 값이나 값 집합을 색인에 추가해야하는지입니다.
지금까지 내가 방금 추가 한 모든 즉, 리드 ON INDEX 온도를 CREATE ('아래 참조')
- (STREET_NUMBER, STREET_NAME)
- (STREET, 교외)
- (STREET_NAME | | ','|| 교외)
- (USER_ID)
- (TIMESTAMP)
- (GEO_LAT)
- (STREET, SUBURB, USER_ID, TIMESTAMP, GEO_LAT)
- (STREET_NAME || ','|| 교외 266 소인 GEO_LAT) 가
- 은 (STREET_NAME) 가
- 은 (STREET_NUMBER)
- (CAST (
STREET_NUMBER
AS 서명)) - (STREET_NAME, STREET_NUMBER)
- (STREET_NAME, CAST (
STREET_NUMBER
맺어))
그러나 나는 이것이 옳지 않다는 것을 알고있다. 이들 중 어느 것이 작동하지 않거나 더 빠르게 내 쿼리를 작성하지 않을 것이라고 지적 할 수 있습니까? NOT 리드 (LEAD_ID BIGINT PRIMARY KEY, USER_ID INTEGER, GEO_LAT, GEO_LONG, CUSTOMER_NAME, UNIT_NUMBER, STREET_NUMBER, STREET_NAME, 교외, 주, 우편 번호를 존재하는 경우 테이블 만들기 "@ :
데이터베이스
문을 만들어 내 sqlite가있다 INTEGER, NMI, DPI_MIRN, STATUS, STATUS_INT INTEGER, OUTCOME INTEGER, OUTCOME_FULL INTEGER, FINAL_CODE INTEGER, NOTES, NOTES_EXTRA, TIMESTAMP) "];
719130; 50; -32.933871, 151.774978, 미스터 데이비드 리 1; 34; 레 노스 PDE, 뉴캐슬, NSW, 2300 ;;; P; 0; 0; 0; 0 : 0 : 0; 20120602174036 719233, 50, -32.9307183, 151.7803428, Mr Mitch James, 1, 1-7, TYRRELL ST, THE HILL, NSW, 2300 ,; P, 0, 0 ;; 0 : 0 : 0; 20120602174036 719234 벤 포스터, 4, BINGLE ST, 뉴캐슬, NSW, 2300, 41021027208, 52404368858, C, 0, 0, 0, 0 : 0 : 0 20120602174036 719300 50; -32.933155; 151.777351; -32.9291125, 151.785025, 151.785025, Ms Marilyn Rajakulenthiran, U 12, 3, KING ST, 뉴캐슬, NSW, 2300 ,; 0 : 0 : 0, 20120602174036
질의는 이제 SELECT LEAD_ID, USER_ID, UNIT_NUMBER, STREET_NUMBER, STREET_NAME, SUBURB, STATE, POSTCODE, STATUS_INT, OUTCOME, CUSTOMER_NAME, NOTES FROM JOIN 결과 ilter ON leads.OUTCOME = outcomeFilter.VAL JOIN suburbFilter on leads.SUBPOST = suburbFilter.VAL USER_ID IN (% @) 및 '% @'및 '% @'사이의 시간차 순서 SUBURB, STREET_NAME, CAST (STREET_NUMBER AS SIGNED)
내 머리 글자가 아직 개선되지 않았습니다. 가장 느리게 수행하여 순서로 보입니다.
나는 그 subselect를 조인으로 다시 작성함으로써 약간의 향상을 얻을 수있는 빛나는 페니를 기꺼이 내기를 원합니다. –
죄송합니다. 이번에는 마크가 아닙니다. 내 쿼리는 이제 SELECT LEAD_ID, USER_ID, UNIT_NUMBER, STREET_NUMBER, STREET_NAME, SUBURB, STATE, POSTCODE, STATUS_INT, OUTCOME, CUSTOMER_NAME, NOTES FROM JOIN에 있습니다. outcomeFilter ON leads.OUTCOME = outcomeFilter.VAL JOIN suburbFilter ON leads.SUBPOST = suburbFilter.VAL '% @'와 '% @'사이의 사용자 _ID (% @) 및 시간대 (SUBURB, STREET_NAME, CAST ('STREET_NUMBER'AS SIGNED) 순서). 또한 인덱스를 더 추가하려고 시도했지만 시작한 때보 다 더 빠릅니다. 나는 문제의 대부분이 결국 주문에 있다고 생각한다. 어떤 아이디어? – davidelias16