Mysql

為大量條目(性能)編制固定長度字元串(10 個字元 - 電話號碼)的索引?

  • August 26, 2021

我知道已經提出了很多類似的問題,但我無法為我的問題找到明確的答案。

簡要地,

  • 我必須使用 REST API 和他們的電話號碼對使用者進行身份驗證。
  • 電話號碼是固定長度 (10)。可以以任何建議的方式儲存。
  • 在包含數千個電話號碼和關聯的user_id的表中,我希望能夠快速查詢數據庫並獲取與給定電話號碼關聯的user_id 。
  • 我讀到對字元串或隨機整數的索引是不好的。

我應該如何建構數據庫以最有效地查詢電話號碼?

為什麼對字元串進行索引不好?如果您的應用程序需要它,那還不錯!MySQLPRIMARY KEY聚集索引。聚集索引將數據按物理順序排列在磁碟上。此外,使用 MySQL,聚集索引中的所有數據都儲存在索引本身中,如果查詢僅包含索引中的欄位,則查找速度會更快!

  • 電話號碼:電話號碼不是整數。您不會加、減、乘或除電話號碼(或取平方根……希望如此!),所以您應該將它們儲存為字元串,因為這就是它們在這種情況下的含義 - 任意一組數字,只有一個意思是把所有的東西作為一個單元(即一個字元串)!

我假設您的user_id對於每條記錄都是phone_number唯一的-因此您可以根據自己的要求進行選擇,在這種情況下,您最常見的查詢是什麼?

user_id從問題來看,您正在使用該欄位查找s phone_number,因此在這種情況下,我建議您使用PRIMARY KEYof ( phone_number, user_id) 以實現最快的查找。

在 PostgreSQL 上有 100 億(10,000,000,000)條記錄的表上,我能夠在亞毫秒的時間範圍內執行點查詢(即基於 PK 的 1 條記錄) - 所以你應該沒有查詢性能問題基於的簡單查找phone_number

此外,PostgreSQL 沒有聚集索引,因此需要進行查找 - 使用 MySQL,您不會有這樣的成本!

引用自:https://dba.stackexchange.com/questions/298045