2012-01-16 19 views
0

我有一個問題,我需要將Amazon.com的訂單號存儲到MySQL表中。 Amazon.com訂單號由數字和連字符組成,如102-1234567-1234567(17個數字和2個連字符)。我已經看到這個「數字」被存儲爲字符串,因爲在某些情況下使用了連字符,並且隨後對該列進行的搜索是字符串搜索而不是數字搜索。MySQL:存儲Amazon.com的包含連字符的訂單號

現在,我只是將它們存儲爲VARCHAR(19),但有沒有一種方法可以存儲它,以便在存儲和檢索時更高效,更快速?例如,我想過將每個數字段解析爲其自己的一列(對於一個訂單「數量」共計3列),並且執行... WHERE colA=102 AND colB=1234567 AND colC=1234567來提取特定訂單,而不是執行...WHERE col LIKE '102-1234567-1234567'。我知道前者使用的字節少得多,但速度更快嗎?我正在研究的表格有超過10萬行,每天增長很少。

關於我應該如何修改結構或者我不應該怎麼做的建議或意見? TIA!

+0

謝謝你的所有偉大的答案。我將使它成爲VARCHAR(X),其中X> 19,索引此列,使用'='而不是'LIKE',儘管我需要閱讀好處。我不太瞭解這個區別。 – musicliftsme 2012-01-16 23:28:59

回答

2

不要分開亞馬遜當前訂單編號的三個數字外觀片段。您的數據庫引擎速度足夠快,可以在其列正確編制索引時按此編號查找訂單。我在這裏從你的問題中得到了「過早優化」的含義。

考慮以下建議:

  • 擴大你的列varchar(100)或東西比19大的你是依賴於供應商,並作出很大的假設,即它們的結構不會改變。

  • 在此列上放置索引。 100K行是一個非常小的數據集。

  • 找到平等,而不是像你現在這樣做。 WHERE Order='123-456-234

3

這些訂單號碼實際上不是數字。這些是字符串,因此應該作爲字符串存儲。

我不知道亞馬遜命令的詳細信息,但如果它們總是19個字符長,則可以使用CHAR(19)而不是VARCHAR(19)以及使用ASCII字符集而不是任何多字節。這應該使它快一點。同樣創建一個將完全覆蓋列的索引(即長度19)也可能有助於性能,以及使用=而不是LIKE

+1

他們今天19 * *。 – 2012-01-16 23:17:41

+0

+1「以及使用=而不是LIKE」 – 2012-01-16 23:19:24

相關問題