主鍵、自增主鍵、主鍵索引、唯一索引概念區別與效能區別
概念區別:
主鍵:指欄位唯一不為空值的列。
主鍵索引:指的就是主鍵,主鍵沒有明確的概念定義,主鍵既是約束,也是索引,主鍵是索引的一種,是唯一索引的特殊型別。建立主鍵的時候,資料庫預設會為主鍵建立一個唯一索引。
自增主鍵:欄位型別為數字、自增、並且是主鍵。
唯一索引:索引列的值必須唯一,但允許有空值。主鍵是唯一索引,這樣說沒錯。但反火來說唯一索引也是主鍵就錯誤了,因為唯一索引允許空值,主鍵不允許有空值,所以不能說唯一索引也是主鍵。
效能區別:
通過測試,發現主鍵、自增主鍵、唯一索引的查詢效率不一樣,當然這個差距很小,總結為:
查詢:唯一索引 > 自增主鍵 > 主鍵(主鍵索引)
插入:主鍵 > 自增主鍵 > 唯一索引
測試場景:
建立3個表,名欄位相同:id,name,money,tradDate
各插入100W條相同的資料
table A:id為主鍵,table B:id自增並且是主鍵,tableC:id建立唯一索引
查詢:
效能:唯一索引 >自增主鍵> 主鍵(主鍵索引)
A表(主鍵):0.06s
B表(自增主鍵):0.01s,
C表(唯一索引):0.00s
插入:
10W條資料,批量插入,效能:主鍵 >自增主鍵 > 唯一索引
A表(主鍵):38.408s
B表(自增主鍵):38.708s,
C表(唯一索引):39.018s
寫了這麼多,忽然感覺做這個測試沒有什麼意義,有木有?
相關文章
- Oracle主鍵、唯一鍵與唯一索引的區別Oracle索引
- 主鍵和唯一索引的區別索引
- indexedDB 索引與primarykey主鍵區別Index索引
- Oracle主鍵約束、唯一鍵約束、唯一索引的區別(轉)Oracle索引
- 主鍵(PK)與非空唯一索引(Unique Index)的區別索引Index
- 【INDEX】Oracle中主鍵、唯一約束與唯一索引之區別IndexOracle索引
- 主鍵索引 (聚集索引) 和普通索引 (輔助索引) 的區別索引
- 主鍵與主鍵索引的關係索引
- MYSQL中的普通索引,主健,唯一,全文索引區別MySql索引
- postgresql自增主鍵SQL
- Mysql關於自增主鍵,自增主鍵優化總結MySql優化
- 主鍵為聯合主鍵時,索引B+樹結構索引
- Oracle主鍵與複合主鍵的效能分析Oracle
- ClickHouse主鍵索引最佳實踐索引
- MYSQL INNODB主鍵使用varchar和int的區別MySql
- mysql刪除主鍵索引,刪除索引語法MySql索引
- MySQL 中的自增主鍵MySql
- MySQL 主鍵自增也有坑?MySql
- Oracle 建立主鍵自增表Oracle
- 查詢(看)表的主鍵、外來鍵、唯一性約束和索引索引
- Oracle刪除主鍵保留索引的方法Oracle索引
- 向Mysql主鍵自增長表中新增資料並返回主鍵MySql
- ORACLE: 查詢(看)表的主鍵、外來鍵、唯一性約束和索引Oracle索引
- 主鍵local索引、unique local索引、分割槽索引順序的理解索引
- MySQL 主鍵自增 Auto Increment用法MySqlREM
- MySQL新增自增主鍵的坑MySql
- postgresql重置序列和自增主鍵SQL
- 在已存在的表結構上新增主鍵、外來鍵、聯合主鍵、聯合索引的例子索引
- MySQL 聚簇索引一定是主鍵嗎MySql索引
- SQLSERVER 的主鍵索引真的是物理有序嗎?SQLServer索引
- Laravel 中使用 Redis 生成自增主鍵LaravelRedis
- MySQL8自增主鍵變化MySql
- SqlServer主鍵和自增長設定SQLServer
- MySQL自增主鍵跳號問題MySql
- Mybatis:插入資料返回自增主鍵MyBatis
- PostgreSQL 建立主鍵自增表的 DDLSQL
- MyBatis 獲取自增主鍵MyBatis
- mybatis獲取自增主鍵MyBatis