2012-05-28 79 views
1

目標:我試圖確定表結構和查詢的最佳方法;即如何最好地創建組合索引鍵來優化每個表中大約500k行的四個表連接。如何創建SQL測試環境?

精神障礙:這是建立表格並填充測試數據,我很難理解(SQL新手)。 This SO post描述了我試圖解決的問題的75%,我想我可以完成我的理解,如果我可以讓answer's code在我的localhost(apache2,mysql5.1,phpMyAdmin)上運行。

的請求幫助:傑克Feasel的sqlfiddle網站是一個很好的工具,但據他不會擴展到這一水平。但是,有人可以使用sqlfiddle向我展示如何在本地機器上構建此環境?我希望推斷你的sqlfiddle帖子來複制上面提到的示例代碼。

一個假設:我的大部分SQL經驗一直在調整ADOdb Database Abstraction Library,但我意識到MYSQL代碼在測試環境中會略有不同。儘管如此,我仍然假設知道如何設置本地SQL測試環境以及隨後的數據庫結構和查詢,在ADOdb環境中實施時,我將獲得的優化知識將會適用並且有益。

+0

您將需要提供更多關於您想要表示的數據結構以及您想要生成的結果集的詳細信息。 –

+0

@Jake_Feasel,我只是想了解如何設置一個環境來運行發佈的示例代碼到我鏈接到的SO問題。一旦我明白了,那麼如果我仍然需要幫助解決我的具體問題,那麼我可以通過鏈接到我自己的sqlfiddle示例來回到SO。 – Ricalsin

+0

對不起,我以前沒有仔細閱讀過。請參閱下面的答案。 –

回答

1

你真正需要的是一個數據生成工具,它將幫助您需要用數以百萬計的記錄的數據庫,並可以看到一個有意義的數據臃腫的數據庫後,你就可以開始你的性能測試實驗的最佳關係,指數和加入這將幫助您檢測真正需要優化的內容。

我以前親自使用過的一個是:GenerateData 但是還有others

0

http://sqlfiddle.com/#!2/b771b/2

在這裏,你可以看到,我複製你的表定義和粘貼他們到架構面板。我還在其中添加了一些虛擬數據。使用這個基本結構,我也執行了你的查詢;你可以看到它產生了與你的餡餅顯示相同的執行計劃(展開小提琴上的「+查看執行計劃」)。

你可以看到它在SQL Fiddle上運行良好。這解決了標題中的問題(「如何創建SQL測試環境」)。您的其他請求中的哪一部分「我如何在本地機器上構建這個環境?」你有麻煩嗎?

+0

因此,如果我想在海報表字段中添加500k名稱 - 爲了測試訪問時間 - 然後我將使用隨機數生成器並循環它或使用編輯器如vim生成逗號分隔文本字符串並將其上載到Insert語句中(如果是這樣的話)?我只是想知道什麼是最好的方法是基本上做你剛剛做的,但500K行,而不是註釋掉where子句。我意識到sqlfiddle並沒有擴展到這個水平,但是如果我能看到它是如何完成5行的話,我可以將其推斷到我的本地設置中。 – Ricalsin

+0

@Ricalsin爲插入生成隨機數據肯定會起作用。只要意識到你的執行計劃將會是相同的,無論5行還是500k。考慮到這是一個簡單的查詢,但是,我懷疑你會通過優化硬件和操作系統設置而不是查詢調優來獲得大部分性能提升。 –

+0

傑克,這不是我的查詢。我的查詢將使用多個複合索引來連接4個表格(在我的文章的第一行中進行了描述)。我需要了解如何構建一個類似的測試環境(本地),並且我使用SO帖子來請求如何在表格中設置500k行的環境。顯然它並不像看起來那麼容易。我已經閱讀你可以在哪裏:INSERT INTO MyTable(ID,Name)SELECT ID,NAME FROM OtherTable',但是這要求你在你的數據庫中有這樣的信息 - 我現在不需要。我無法使用5行來測試訪問時間,我需要研究一個計劃的效率。 – Ricalsin