2011-03-04 158 views
1

我有一個包含相對大的數據表,
讓時間過久下面的語句:查找表的最小和最大值在一定的時間

SELECT MIN(column) FROM table WHERE ... 
SELECT MAX(column) FROM table WHERE ... 

我試圖索引列,但表現仍然不足以滿足我的需求。

我還想過使用觸發器或事件緩存另一個表中的最小值和最大值。
但我的MySQL版本是5.0.51a,它需要SUPER特權的觸發器,並不支持事件。

對我來說,擁有SUPER權限或升級MySQL是不可能的。
(如果可能,那就不用問了!)

如何在MySQL裏面解決這個問題?
也就是說,沒有OS的幫助。

+0

你可以給一個表的定義嗎? – 2011-03-04 10:10:44

+0

「包含相對較大數據的表」 - 多大? 「性能仍然不足以滿足我的需求」 - 您的查詢速度有多慢? – Tony 2011-03-04 10:14:32

+4

如果您單獨執行兩個查詢以獲得最小值和最大值,請將它們組合爲單個查詢。您正在使用的WHERE子句也可能會產生很大的差異...列上的簡單索引不太可能產生太大差異 – 2011-03-04 10:26:13

回答

0

如果您的column被編入索引,您應該會立即發現min(column),因爲這是MySQL會找到的第一個值。
索引列上的max(column)也是如此。

如果由於某些原因無法添加索引,則以下觸發器會將MIN和MAX值緩存在單獨的表中。

注意,TRUE = 1和FALSE = 0

DELIMITER $$ 

CREATE TRIGGER ai_table1_each AFTER INSERT ON table1 FOR EACH ROW 
BEGIN 
    UPDATE db_info i 
    SET i.minimum = LEAST(i.minimum, NEW.col) 
     ,i.maximum = GREATEST(i.maximum, NEW.col) 
     ,i.min_count = (i.min_count * (new.col < i.minumum)) 
         + (i.minimum = new.col) + (i.minimum < new.col) 
     ,i.max_count = (i.max_count * (new.col > i.maximum)) 
         + (i.maximum = new.col) + (new.col > i.maximum) 
    WHERE i.tablename = 'table1'; 
END $$ 

CREATE TRIGGER ad_table1_each AFTER DELETE ON table1 FOR EACH ROW 
BEGIN 
    DECLARE new_min_count INTEGER; 
    DECLARE new_max_count INTEGER; 

    UPDATE db_info i 
    SET i.min_count = i.min_count - (i.minimum = old.col) 
     ,i.max_count = i.max_count - (i.maximum = old.col) 
    WHERE i.tablename = 'table1'; 
    SELECT i.min_count INTO new_min_count, i.max_count INTO new_max_count 
    FROM db_info i 
    WHERE i.tablename = 'table1'; 

    IF new_max_count = 0 THEN 
    UPDATE db_info i 
    CROSS JOIN (SELECT MAX(col) as new_max FROM table1) m 
     SET i.max_count = 1 
     ,i.maximum = m.new_max; 
    END IF; 
    IF new_min_count = 0 THEN 
    UPDATE db_info i 
    CROSS JOIN (SELECT MIN(col) as new_min FROM table1) m 
     SET i.min_count = 1 
     ,i.minimum = m.new_min; 
    END IF; 
END $$ 

DELIMITER ; 

after update觸發將所述插入件的一些混合和刪除觸發器。

相關問題