2010-01-29 70 views
0

作爲數據分析項目的一部分,我將在mysql數據庫上發佈一些長時間運行的查詢。我未來的行動方針取決於我一路上取得的成果。對於我來說,查看仍在運行的SELECT語句生成的結果部分會很有用。長時間運行查詢:觀察部分結果?

有沒有辦法做到這一點?或者我堅持等待,直到查詢完成才能查看運行的第一秒內生成的結果?

謝謝你的幫助:)

回答

1

在一般情況下,部分結果不能產生。例如,如果您有一個具有GROUP BY子句的聚合函數,則應在第一行返回之前分析所有數據。 LIMIT子句不會對你有所幫助,因爲它在計算輸出後被應用。也許你可以給一個具體的數據和SQL查詢?

1

你可能會考慮的一件事是抽取你的表格。在數據分析中,這是一個很好的練習,可以在編寫代碼時加快迭代速度。

例如,如果您有表中創建privelages和你有鑰匙UNIQUE_ID和一些數據data_value

如果UNIQUE_ID是數字,幾乎任何數據庫中的一些大型巨大的表X

create table sample_table as 
select unique_id, data_value 
    from X 
where mod(unique_id, <some_large_prime_number_like_1013>) = 1 

會爲您提供一個隨機數據樣本來處理您的查詢,並且您可以將您的sample_table與其他表進行內聯,以提高測試/查詢結果的速度。由於採樣,您的查詢結果應該大致代表您將得到的結果。請注意,您正在使用的數字必須是質數,否則它將不會提供正確的樣本。上面的例子會將你的表縮小到原始大小的0.1%(準確的說是0.0987%)。

大多數數據庫也比只使用mod有更好的採樣和隨機數方法。檢查文檔以查看您的版本可用的內容。

希望幫助, McPeterson

1

這取決於你的查詢正在進行。如果它需要在生成輸出之前獲得整個結果集 - 比如可能發生針對分組搜索或排序搜索或具有子句的查詢,則無需執行任何操作。

但是,如果延遲的原因是客戶端緩衝(這是默認模式),那麼可以使用「mysql-use-result」作爲數據庫處理程序的屬性而不是默認值進行調整「MySQL的店,結果」。這對於Perl和Java接口來說是這樣的:我認爲在C接口中,你必須使用執行查詢的函數的無緩衝版本。