2016-07-19 66 views
0

所以我剛剛建立了其具有以下字段只持有一個表的數據庫:SQL查詢速度和完善

key_value:擁有一鍵

贖回6位代碼:布爾因爲如果關鍵被贖回

redeemed_by:誰贖回它

REDEEMED_DATE:當它被贖回

SOFTWARE_NAME:軟件的T名他的關鍵涉及到

我基本上從一個空的數據庫開始,然後當有人通過PayPal購物時,他們獲得自己的密鑰並將其添加到數據庫中。之後,他們打開一個應用程序,讓他們輸入他們的代碼,然後在數據庫中搜索代碼並標記爲已兌換,以便它不能再次使用 - 這會導致兌換和未兌換的代碼都在一個表格中。

如果我要達到好幾千購買,這是否會導致數據庫大大減慢,崩潰也許?如果它是一個更大的數字,比如說10,000呢?

什麼是一個很好的解決方案,即使我有另一張兌換鑰匙表,它將不得不在贖回表中看看它是否被贖回?

感謝您的任何答案,我仍然在學習數據庫和SQL!

+2

如果你的MySQL有10,000條記錄的問題,你是一個大規模超載和/或動力不足的機器上運行它。還有在他們數十億條記錄的MySQL實例。 –

回答

1

我認爲你的設計是健全的。您可能希望根據您將要運行的查詢添加索引。 key_value聽起來像是一個很好的主鍵,它也可以作爲更新兌換的索引。

正如Marc B所指出的那樣,硬件是您唯一考慮性能的因素。

1

我會用這兩個表:一爲你spec'ed了什麼,而是另一個作爲存檔表與遷移了定期贖回/過期的記錄工作。

推理:表中的主要目的是用於贖回的益處,而不是用作一個歸檔。隨着時間的推移,隨着越來越多的贖回記錄表中發現,對於未兌換記錄查找的性能開始越來越差,並因爲表中所有的「朽木」雪上加霜。 (您認爲易趣將一張桌子上的所有活動拍賣完成嗎?)

如果您仍然絕對需要「一張桌子」解決方案,您可以輕鬆創建合併這兩張桌子的視圖。

此外,如果你設置了一個合適的主鍵,性能(暫時的)不會很快下降,因爲這將消除表掃描這是你在暗指當記錄量的增加什麼。