2010-03-23 165 views
0

我有一個簡單的表格,我必須提取一些記錄。問題是,評價函數是一個非常耗時的存儲過程,所以我不應該來兩次在這個句子中這樣稱呼它:MySQL優化語句

SELECT *, slow_sp(row) FROM table WHERE slow_sp(row)>0 ORDER BY dist DESC LIMIT 10 

首先我想在優化這樣的:

SELECT *, slow_sp(row) AS value FROM table WHERE value>0 ORDER BY dist DESC LIMIT 10 

但是它不起作用,因爲在評估WHERE子句時不會處理「值」。

任何想法來優化這句話?謝謝。

回答

2

slow_sp做什麼?要開始優化查詢,您應該在dist上添加一個索引。

要使您的第二個查詢工作,請使用HAVING而不是WHERE

+0

根據文本語料庫中單詞的「重要性」,slow_sp返回0到100之間的值。基本上訪問一組預先計算的值來確定一個int值。 我會嘗試HAVING值。謝謝。 – Ivan 2010-03-23 15:21:27

+0

這是一個MySQL函數,對不對?基本上在包含where語句的每個列上添加索引。如果沒有在相關函數中看到查詢,我不能再幫忙。 – raveren 2010-03-23 15:32:19

+0

沒關係。我忘記了HAVING子句可以提供幫助。現在它正在工作。謝謝! – Ivan 2010-03-23 17:15:07