0
我有一個使用了大量的聚合函數來對每個項目(相冊)建立數據的查詢。這些數據非常重要,需要在那裏。目前,查詢本身需要大約1.5秒的時間才能執行,這太長了。如何優化這個MySQL查詢?
我已經創建了這些功能,因爲有相當多的是都需要做這些計算幾個疑問,所以這是有道理的他們放在各自的功能,便於代碼的可維護性的。否則,每當一個條件發生變化時,就會有5個或更多的地方去尋找並做出改變。
我真的想知道我能做些什麼,使這個查詢更快。很明顯,聚合函數是罪魁禍首,因爲如果我用一個簡單的SELECT *替換它,它會在大約0.1秒內運行。
我能想到的是消除聚合函數,做內唯一加入/子查詢的需要進行聚合的各個項目。正如你可以想象的那樣,我真的不想這樣做,因爲它需要重構其他地方的負載,並使代碼維護非常混亂。
有什麼建議嗎?謝謝!
SELECT
fnAlbumGetNumberOfPhotos(albumId,1,0, 100) AS albumNumberOfPhotos,
fnLikeGetCount(1, 3, album.albumId) AS albumLikeCount,
fnGetAlbumPhotoViewCount(albumId) AS albumNumberOfPhotoViews,
fnLikeGetDoesUserLikeDislike(1, 3, album.albumId, 100) AS albumDoesUserLike,
fnObjectTagGetObjectTags(3, albumId) AS albumTags
FROM
album
WHERE 0 = 0
-- AND insert additional filters here
LIMIT 0,15
功能都簡單集合函數,e.g:
如果你會給那些功能的源代碼,我們就能夠理解,有什麼可以優化... Currenlty,這個問題是沒有意義的... – Deele
@Deele:我因爲它們是基本的集合函數,所以並沒有真正看到需求,但是如果我錯了,我已經發布了其中一個函數。他們幾乎都是一樣的。每個聚合函數爲查詢添加大約0.250秒。 – Cheeky
這個查詢應該做什麼工作?什麼是你想要的輸出,什麼是你想要使用的表?大多數的時候,一切都可以用另一個之路探尋到解決方案來解決,如果是一些好康畫廊,我敢肯定,輸出可以是結構化,在更小的位分,或有可能在表中增加了一些更多的列,這將有助於去解決問題。 Currenlty,我在這些SQL中沒有看到任何變化,這可以大大提高性能。 – Deele