Mysql為什麼不用uuid作為表的主鍵
- UUID生成速率低下
Java的UUID依賴於SecureRandom.nextBytes方法,而SecureRandom又依賴於作業系統提供的隨機數源,在Linux系統下,它的預設依賴是/dev/random,而這個源是阻塞的。最可怕的是,這個nextBytes方法還是一個synchronized方法,也就是說,如果多執行緒呼叫UUID,生成速率不升反降。
測試結果:在一臺64執行緒的伺服器上,呼叫UUID.randomUUID方法,生成一千萬個uuid平均耗時在130s,tps不到8w
- UUID主鍵在innodb中會引發效能問題
a. innodb中的主鍵索引也是聚集索引,如果插入的資料是順序的,那麼b+樹的葉子基本都是滿的,快取也可以很好的發揮作用。如果插入的資料是完全無序的,那麼葉子節點會頻繁分裂,快取也基本無效了。這會減少tps
b. uuid佔用的空間較大
- UUID完全沒有意義,如果有一個主鍵是全域性自增的,那麼資料排列順序就是資料的插入順序
相關推薦
Mysql為什麼不用uuid作為表的主鍵
UUID生成速率低下 Java的UUID依賴於SecureRandom.nextBytes方法,而SecureRandom又依賴於作業系統提供的隨機數源,在Linux系統下,它的預設依賴是/dev/random,而這個源是阻塞的。最可怕的是,這個nextBytes方法還是一
mysql使用uuid()函式生成主鍵方法(java環境)
1.SELECT UUID(); //結果如下,問題:使用不方便,無法在資料庫中複製貼上 180da4bb-b2ed-11e7-beee-54e1ad432105 2. SELECT REPLA
MySQL 使用自增ID主鍵和UUID 作為主鍵的優劣比較具體過程(從百萬到千萬表記錄測試)
popu tis pack 方案 表數據 lock 進行 args ios ?測試緣由? 一個開發同事做了一個框架。裏面主鍵是uuid。我跟他建議說mysql不要用uuid用自增主鍵,自增主鍵效率高,他說不一定高,我說inn
MySQL 使用自增ID主鍵和UUID 作為主鍵的優劣比較詳細過程(500W單表)
一個開發同事做了一個框架,裡面主鍵是uuid,我跟他建議說mysql不要用uuid用自增主鍵,自增主鍵效率高,他說不一定高,我說innodb的索引特性導致了自增id做主鍵是效率最好的,為了說服他,所以準備做一個詳細的測試。 作為網際網路公司,一定有使用者表,而且使用
利用PHP腳本輔助MySQL數據庫管理2-表主鍵表索引
dbi ble nbsp 管理 item tab count key root <?php $dbi = new DbMysql; $dbi->dbh = ‘mysql://root:[email protected]/coffeetest‘; $ma
mysql修改表結構 MySQL修改表結構操作命令總結 MySql資料庫在表中新增新欄位,設定主鍵,設定外來鍵,欄位移動位置,以及修改資料庫後如何進行部署和維護的總結 mysql 如何修改、新增、刪除表主鍵
MySQL修改表結構操作命令總結 以下內容轉自:http://www.jb51.net/article/58079.htm 表的結構如下: 複製程式碼程式碼如下:
MySQL 如何修改、新增、刪除表主鍵
在我們使用mysql的時候,有時會遇到須要更改或者刪除mysql的主鍵,我們能夠簡單的使用 alter table 表名 drop primary key;來完成。以下我使用資料表table_test來作了樣例。 1、首先建立一個數據表table_test: create table t
Java註解配置數據庫表主鍵
java gen http 運行 數據庫表 integer rac bsp ber 一 數字類型 Integer @Id @GeneratedValue(strategy=GenerationType.IDENTITY) 運行後就Hiber
SQL Server(MySql)中的聯合主鍵(聯合索引) 索引分析
判斷 reat 系統 lap creat insert 結果 問題 select 最近有人問到這個問題,之前也一直沒有深究聯合索引具體使用邏輯,查閱多篇文章,並經過測試,得出一些結論 測試環境:SQL Server 2008 R2 測試結果與MySql聯合索引查詢機制類似,
Mybatis之MySql批量insert後返回主鍵
app bsp long 需求 values ram value tis pub 需求:使用批量插入後,需要insert之後的每一條記錄的ID 註意:Mybatis3.3.1的版本以後支持批量插入後返回主鍵ID 示例: domin.java: public class U
MySQL online DDL 報錯 主鍵衝突
alter table tt ENGINE=InnoDB ; ERROR 1062 (23000): Duplicate entry '154878957' for key 'PRIMARY' 對一個大表 進行online DDL的時候偶爾回出現一下報錯 ,&nbs
MyBatis+MySQL 返回插入記錄的主鍵ID
一、nginx基本配置 二、nginx日誌檔案配置 在nginx中conf中的nginx.conf有一段關於日誌檔案的配置 三、製作按時間切割日誌檔案的指令碼 1.製作切割日誌指令碼cutlog.sh 2.使用定時執行命令 (1)crontab -e 進入編輯 (2)輸
MYSQL插入資料後返回主鍵
最近做專案,要求不能使用mybatis等框架,所以一切資料庫訪問操作都是用原生的JDBC。 用過mybatis的都知道,插入新資料後可以直接返回主鍵的值,但是使用JDBC不行,於是上網搜了一下,找到一個還蠻好用的方法: SELECT LAST_INSERT_ID();
Oracle中建表主鍵自增
首先建立一張表create table member( memberId number primary key, memberMail varchar2(20)not null, memberName varchar2(20) not null, memberPassword varchar2(20) );
MySQL列的預設值主鍵索引與自增 刪除增加與修改
1. 某些列不插入內容,值是多少? 自動填充NULL2. NOT NULL是幹嘛的? 不能為NULL型別,因為NULL型別查詢的時候需要加語句 IS NULL 或者IS NOT NULL 效率低,查詢速度慢,開發中我們一般不可以設定為預設的能插入NULL型別。 所以會使用NOT NULL來限制使用NU
hibernate 多對多 中間表主鍵問題 及id生成方式
<id name="id" column="id"> <generator class="sequence"> <param name="sequence">person_seq</param><!--指定sequence名--> </gene
MyBatis+MySQL map返回插入的主鍵ID
Mapper.xml <!-- 插入一條資料 --> <insert id="insert" parameterType="java.util.Map" useGenerated
向mysql插入資料,避免主鍵衝突報錯 duplicate key問題
在進行對資料庫進行資料插入的時候,往往因為重複插入,導致主鍵重複,導致程式報錯,duplicate key,其實只要邊插入變更新就行了,你的sql語句可能是這樣寫的: sql = "insert into simtable values(%s,%s,%s,
Springboot 結合mybatis的逆向生成外掛tk的insert方法實現uuid型別的主鍵返回
LZ試了好多方法,最終找到了一個有效的分享給大家。 就是在你需要返回主鍵的這個實體的mapper.xml檔案中覆蓋原先InsertMapper<T>中int insert方法 @InsertProvider(type = BaseInsertProvide
mysql插入自動增長的主鍵後如何獲得該主鍵的值
解決方案:使用函式 LAST_INSERT_ID()用法: 如檢視最新一次自增得到的id: select LAST_INSERT_ID();問題是解決了,但是會不會存在一個問題:我先使用自增主鍵的sql語句插入了值,然後就呼叫 LAST_INSERT_ID()這個函式,