2017-04-08 77 views
2

我有一個表「交易」有600萬條記錄在mysql中通過列整數或列字符串搜索更快嗎?

id  trx secret_string (varchar(50))  secret_id (int(2.)) 
1   80 52987624f7cb03c61d403b7c68502fb0 1 
2   28 52987624f7cb03c61d403b7c68502fb0 1 
3   55 8502fb052987624f61d403b7c67cb03c 2 
4   61 52987624f7cb03c61d403b7c68502fb0 1 
5   39 8502fb052987624f61d403b7c67cb03c 2 
.. 
999997 27 8502fb052987624f61d403b7c67cb03c 2 
999998 94 8502fb052987624f61d403b7c67cb03c 2 
999999 40 52987624f7cb03c61d403b7c68502fb0 1 
1000000 35 8502fb052987624f61d403b7c67cb03c 2 

正如你可以看到,secret_stringsecret_id會始終保持一致。

比方說,我需要選擇secret_string = "52987624f7cb03c61d403b7c68502fb0"的記錄。

它更快做:

SELECT id FROM transactions WHERE secret_id = 1 

比:

SELECT id FROM transactions WHERE secret_string = "52987624f7cb03c61d403b7c68502fb0" 

還是不要緊?對於其他操作如SUM(trx)COUNT(trx),AVG(trx)等呢?

secret_id目前不存在,但如果通過它搜索記錄更快,我打算在行插入時創建它。

謝謝

我希望我有道理。

+0

絕對按INT。當然,與2-4字節比較要快於50-100字節 – Mojtaba

+0

它應該很重要,在搜索時,INT應該比'varchar(50)'快,儘管你可以創建帶有百萬條記錄的測試表,並且這兩種類型的列和測試它。 (希望不要忘記索引) –

回答

1

Int比較比varchar比較更快,因爲簡單的事實是int比varchars佔用的空間少得多。

這對於未索引訪問和索引訪問都適用。最快的方法是索引int列。

還有一個使用int的原因,那就是規範化數據庫。而不是在表中存儲數千次文本「52987624f7cb03c61d403b7c68502fb0」,您應該存儲它的id並將祕密字符串存儲在單獨的表中。對於SUM COUNT AVG等其他操作來說,這是相同的交易。

+0

非常感謝您的洞察力。這非常有幫助。感謝您的時間!乾杯! – karlosuccess

-1

正如其他人告訴你的:選擇int比字符串明確得更快。但是,如果您需要通過secret_string選擇,所有給定的字符串看起來像是一個十六進制字符串,也就是說您可以考慮使用hex('52987624f7cb03c61d403b7c68502fb0')將這些字符串轉換爲int(或大int)並存儲這些int值而不是字符串