2012-06-11 25 views
7

SEÇ ve hükümlerin saklı işlev çağrısı optimize? Ya da MySQL sahnenin arkasında böyle bir optimizasyon yapıyor mu? Aslında işlev deterministik olarak bildirilmiştir.aşağıdaki yapıya sahip bir SQL sorgusu var

Ayrıca, işlev parametrelerinin kısmen seçilen tablonun sütunlarından olduğunu belirtmem gerekir. Bunu yansıtacak şekilde biraz değiştirdim.

+0

mi 'param' bir tablodaki sütun veya parametre? –

cevap

7

biri daha hızlı gerçekleştirir Rewrite ve test:

MySQL
SELECT *, storedfunc(param, table.column) AS f 
FROM table 
WHERE storedfunc(param, table.column) < value 
ORDER BY f ; 

SELECT * 
FROM 
    (SELECT *, storedfunc(param, table.column) AS f 
    FROM table 
) AS tmp 
WHERE f < value 
ORDER BY f ; 

, hatta (: değil standart SQL sözdizimi uyarı): Böyle yazabilirsiniz

SELECT *, storedfunc(param, table.column) AS f 
FROM table 
HAVING f < value 
ORDER BY f ; 
+0

Strangely, Daha sonra denedim ama MySQL bir hata gösterdi. Tekrar deneyeceğim. – Stan

+0

Tam olarak ne denediğinizi yayınlayabilir misiniz? Ve ne hata mesajı? –

+0

Aslında, '' '' '' '' '' '' '' '' da denedim, bu yüzden hatayı üretti. Her neyse, MySQL 'deterministic' işlev bildirimi nedeniyle optimizasyonu otomatik olarak yapar mı? – Stan

İlgili konular