Mysql
為大量條目(性能)編制固定長度字元串(10 個字元 - 電話號碼)的索引?
我知道已經提出了很多類似的問題,但我無法為我的問題找到明確的答案。
簡要地,
- 我必須使用 REST API 和他們的電話號碼對使用者進行身份驗證。
- 電話號碼是固定長度 (10)。可以以任何建議的方式儲存。
- 在包含數千個電話號碼和關聯的user_id的表中,我希望能夠快速查詢數據庫並獲取與給定電話號碼關聯的user_id 。
- 我讀到對字元串或隨機整數的索引是不好的。
我應該如何建構數據庫以最有效地查詢電話號碼?
為什麼對字元串進行索引不好?如果您的應用程序需要它,那還不錯!MySQL
PRIMARY KEY
是聚集索引。聚集索引將數據按物理順序排列在磁碟上。此外,使用 MySQL,聚集索引中的所有數據都儲存在索引本身中,如果查詢僅包含索引中的欄位,則查找速度會更快!
- 電話號碼:電話號碼不是整數。您不會加、減、乘或除電話號碼(或取平方根……希望如此!),所以您應該將它們儲存為字元串,因為這就是它們在這種情況下的含義 - 任意一組數字,只有一個意思是把所有的東西作為一個單元(即一個字元串)!
我假設您的
user_id
和對於每條記錄都是phone_number
唯一的-因此您可以根據自己的要求進行選擇,在這種情況下,您最常見的查詢是什麼?
user_id
從問題來看,您正在使用該欄位查找sphone_number
,因此在這種情況下,我建議您使用PRIMARY KEY
of (phone_number
,user_id
) 以實現最快的查找。在 PostgreSQL 上有 100 億(10,000,000,000)條記錄的表上,我能夠在亞毫秒的時間範圍內執行點查詢(即基於 PK 的 1 條記錄) - 所以你應該沒有查詢性能問題基於的簡單查找
phone_number
!此外,PostgreSQL 沒有聚集索引,因此需要進行查找 - 使用 MySQL,您不會有這樣的成本!