我在我的應用程序中有很多像這樣的查詢;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
我的問題是,它的值或值的集合我應該添加索引來。
到目前爲止,我剛剛添加的一切,即CREATE INDEX temp在引線( '見下文')
- (STREET_NUMBER,STREET_NAME)
- (街道,郊區)
- (STREET_NAME | | '' ||郊區)
- (USER_ID)
- (時間戳)
- (GEO_LAT)
- (STREET,SUBURB,USER_ID,TIMESTAMP,GEO_LAT)
- (STREET_NAME || ','||郊區,USER_ID,時間戳,GEO_LAT)
- (STREET_NAME)
- (STREET_NUMBER)
- (CAST(
STREET_NUMBER
AS簽名)) - (STREET_NAME,STREET_NUMBER)
- (STREET_NAME,CAST(
STREET_NUMBER
AS SIGNED ))
但我知道這是不對的。 任何人都可以指出哪些不起作用,或不會讓我的查詢更快,哪些將?
數據庫是SQLite的
我創建語句: @「CREATE TABLE IF NOT EXISTS引線(LEAD_ID BIGINT PRIMARY KEY,USER_ID INTEGER,GEO_LAT,GEO_LONG,CUSTOMER_NAME,UNIT_NUMBER,STREET_NUMBER,STREET_NAME,郊區,州,郵編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; Mitch James先生; 1; 1-7; TYRRELL ST; THE HILL; NSW; 2300 ;;; P; 0; 0 ;; 0 ;; 0:0:0; 20120602174036 719234 ; 50; -32.933155; 151.777351; Ben Foster先生;; 4; BINGLE ST; NEWCASTLE; NSW; 2300; 41021027208; 52404368858; C; 0; 0 ;; 0 ;; 0:0:0; 20120602174036 719300; 50; -32.9291125; 151.785025; Ms Marilyn Rajakulenthiran; U 12; 3; KING ST; NEWCASTLE; NSW; 2300 ;;; P; 0; 0; 0 ;; 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 leads JOIN outcomeF ilter ON leads.OUTCOME = outcomeFilter.VAL JOIN suburbFilter ON leads.SUBPOST = suburbFilter.VAL WHERE USER_ID IN(%@)AND TIMESTAMP BETWEEN'%@'AND'%@'ORDER BY SUBURB,STREET_NAME,CAST(STREET_NUMBER已簽名)
我的初始狀態仍然沒有改善。似乎是最慢的順序
我願意賭一個閃亮的一分錢,你可以通過將這個子選擇改寫爲一個連接來獲得一些改進。 – 2012-08-08 05:39:00
抱歉,馬克不是這次。我的查詢現在是SELECT LEAD_ID,USER_ID,UNIT_NUMBER,STREET_NUMBER,STREET_NAME,SUBURB,STATE,POSTCODE,STATUS_INT,OUTCOME,CUSTOMER_NAME,NOTES FROM leads JOIN outcomeFilter ON leads.OUTCOME = outcomeFilter.VAL JOIN suburbFilter ON leads.SUBPOST = suburbFilter.VAL WHERE USER_ID IN(%@)AND TIMESTAMP BETWEEN'%@'AND'%@'ORDER BY SUBURB,STREET_NAME,CAST('STREET_NUMBER' as SIGNED)。我也嘗試添加更多的索引,但仍然沒有比我開始時更快。我認爲很多問題都來自最後的排序。有任何想法嗎? – davidelias16 2012-08-08 07:06:10