我寫了一個查詢,我的數據庫管理員告訴我需要優化,但我的SQL知識有限。該查詢將爲每個新聞稿和1個相關的照片和標題。它加入了id上的站點(位置)表。需要幫助優化ColdFusion查詢從多個表中提取數據
<cfquery name="local.query" datasource="#this.Dsn()#">
SELECT
pr.press_release_id,
pr.Site_id,
pr.press_release_subject,
pr.press_release_title,
pr.press_release_datetime,
pr.press_release_number,
pr.press_release_published_flag,
pr.press_release_top_story,
pr.related_photo_gallery,
pr.related_page,
s.site_name,
(SELECT TOP 1 ph.press_release_photo_lowres_filename
FROM
tbl_photo as ph
WHERE
ph.press_release_id = pr.press_release_id) as photo_filename,
(SELECT TOP 1 ph.press_release_photo_caption
FROM
tbl_photo as ph
WHERE
ph.press_release_id = pr.press_release_id) as photo_caption
FROM
tbl_press_release as pr
INNER JOIN tbl_site s
ON pr.Site_id = s.site_id
WHERE
LEFT(pr.press_release_number,1) <> <cfqueryparam cfsqltype="cf_sql_varchar" value="I">
<cfif val(event.GetValue("site_id")) gt 0>
AND s.site_id = <cfqueryparam cfsqltype="cf_sql_integer" value="#val(event.GetValue("site_id"))#">
</cfif>
<cfif event.GetValue("pao_search") neq "">
AND
(
press_release_subject like <cfqueryparam cfsqltype="cf_sql_varchar" value="%#event.GetValue("pao_search")#%">
OR
press_release_copy like <cfqueryparam cfsqltype="cf_sql_varchar" value="%#event.GetValue("pao_search")#%">
OR
press_release_wingspan_title like <cfqueryparam cfsqltype="cf_sql_varchar" value="%#event.GetValue("pao_search")#%">
OR
press_release_wingspan_subject like <cfqueryparam cfsqltype="cf_sql_varchar" value="%#event.GetValue("pao_search")#%">
)
</cfif>
AND pr.press_release_published_flag = <cfqueryparam cfsqltype="cf_sql_integer" value="1">
AND (pr.press_release_top_story <> <cfqueryparam cfsqltype="cf_sql_bit" value="True"> OR pr.press_release_top_story IS NULL)
<cfif listLen(event.GetValue("orderBy")) neq 0>
ORDER BY
<cfloop list="#event.GetValue("orderBy")#" index="local.o">#local.o# #uCase(event.GetValue("sort"))#<cfif local.o neq listLast(event.GetValue("orderBy"))>,</cfif></cfloop>
</cfif>
</cfquery>
從管理員告訴我,嵌入式SELECT語句正在減慢查詢速度。我現在意識到,爲每個新聞稿拉動相關的圖片和標題是不必要的,因爲我只需要用press_release_top_story等於true的方式將它們拉到新聞稿中。我認爲這可能有助於節省一些CPU。
我能做些什麼來優化這個?僅供參考這對於SQL Server來說很重要。
這絕對有助於顯着降低SQL服務器上的負載,管理員再次高興。我最終將這個查詢分解成兩個單獨的(並緩存這些),因爲這個查詢有些部分並沒有經常被觸及。謝謝! – negzero7 2011-06-06 17:30:59