1.普通索引上儲存的值是主鍵的值,如果主鍵是乙個很長的字串並且建了很多普通索引,將造成普通索引占有很大的物理空間
2.自增id 在插入的時候可以保證相鄰的兩條記錄可能在同乙個資料塊,而訂單號的連續性在設計上可能沒有自增id好,導致連續插入可能在多個資料塊,增加了磁碟讀寫次數。
innodb儲存引擎邏輯儲存:
表空間 -> 段 -> 區 -> 頁 -> 行
表空間由各個段構成;
區是由連續的頁組成,每個區1mb;
乙個區由可以有多個頁,每頁預設16kb;
頁的組成部分:
2.資料頁頭( page header)固定 56 個位元組 包含slot數目,可重用空間起始位址,3.第乙個記錄位址,記錄數,最大事務id等
4.虛擬的最大最小記錄 (infimum + supremum record)
5.使用者記錄 (user records) 包含已經刪除的記錄以鍊錶的形式構成可重用空間
6.待分配空間 (free spaces) 未分配的空間
7.頁目錄 (page directory) slot 資訊,下面單獨介紹
8.檔案尾 (file trailer) 固定8個位元組,用來保證頁的完整性
innodb加鎖流程:
將掃瞄到的記錄都加鎖,範圍查詢會加間隙鎖,然後加鎖過程按照兩階段鎖2pl來實現:先加鎖,然後所有的鎖在事務提交的時候釋放
innodb 問爛了的 acid原則:
原子性:乙個事務內,要麼全成功要麼全失敗
一致性:保證磁碟和快取的資料一致
隔離性:預設可重複讀
永續性:事務提交後進行刷盤
mysql 建立自增長訂單號
因為最近做專案需要,需要使用到,自定義的不重複的自增長的訂單號,在網上找了資料然後又加入了自己的修改,做成的mysql生成訂單號的儲存過程。drop procedure pp create procedure proc get no tname varchar 50 cname varchar 50...
MySQL高並發生成唯一訂單號的方法實現
這篇博文發布後,有朋友問有沒有sql server版本的,現在有了 傳送門 在乙個erp進銷存系統或0a等其他系統中,如果多人同時進行生成訂單號的操作的話,容易出現多人獲得同乙個訂單號的情況,對公司業務造成不可挽回的損失 我們可以利用儲存過程和資料表搭配,建立一張表和建立儲存過程,儲存過程負責生成訂...
修改訂單號資料型別4 複製訂閱的主鍵限制 修改後
select db,sch,tbl,col,編寫刪除語句 use publisher db exec sp dropsubscription publication n publication article n article subscriber n all destination db n a...