MySql高階應用碎片化整理

2021-10-08 06:05:29 字數 1321 閱讀 7022

case when:

問題1 case when 經常統計、縱表轉橫表的時候用過,ifnull, if 個人相對用的少 問題2 這個親身體會,mysql 5.x版本預設大小寫不敏感,mysql 8 預設大小寫敏感,修改的話必須是資料庫初始化之前修改,之後更改是無效的

問:將時間轉換為時間戳,並使用 int 或者 bigint 型別去儲存,你覺得這樣可行嗎 ?

答: 用int/bigint和datetime儲存在不同專案都使用過,感受就是int/bigint計算上很方便。特別是當前端專案對於時間展示有不同的格式需求的時候,資料庫中儲存的是int/bigint(或者vo層轉換)直接返回給前端,前端可以更方便的定製格式而不用先把datetime轉成時間戳。但是如果沒這方面的需求,那直接儲存datetime就是最方便的,可以減少轉換的次數。所以個人覺得,從儲存角度上來說,如果沒有格式定製的需求,直接儲存datetime最省事。

問:大多數時候,我們會選擇將主鍵設定為 bigint 資料型別,你知道這是為什麼嗎 ?

答:為什麼考慮將主鍵設定為 binint 型別?這裡的主要思想就是為了將來的擴充套件,因為 int 型別的最大表示範圍大約是 20 億,這對於 99% 的專案都基本足夠用了。但是,如果考慮到將來業務發展的比較迅速,就需要使用 bigint 了。如果一開始沒有使用 bigint,而是使用 int,那麼,後期的遷移將會是很大的工作量

索引

三階 2. 如若聯合索引使用了兩個字段,應該是類似將兩個字段進行封裝變為乙個node整體,然後按照字段順序進行排序,如(name, salary),索引會將視為乙個整體,資料優先按照name進行排序,name相同時按照salary排序,一直到葉子節點。 3. 字首索引可能會適合一些字段內容較長,但存在資料頭部的一段短資料區分度可能較高的資料。 4. 建立在頻繁作為查詢條件,且資料區分度較高的列以及表間關聯列。對於文章中提到的覆蓋索引,如果存在某個列值頻繁使用的話,可能為了避免查詢回表,也可以考慮對其建立索引。建索引就是為了查詢快。

檢視

1.檢視使用場景。目前使用經歷,當資料分布在多個表中,且表之間通過id進行關聯,無法直觀的在視覺化工具中看到資料之間的關係(直接看到的都是其他表的id),此時會考慮建立檢視,方便檢視。 2.檢視的資料表區別和聯絡,目前知道的就是檢視並不會儲存資料,個人理解檢視就像乙個儲存好的sql語句,可以隨時執行;檢視資料來自資料表;檢視理論上不建議使用增刪改,就如同它的名字,只用作檢視即可。 3.- 4.刪除檢視後,母表不會受到影響,受影響的是依賴該檢視的其他檢視,此時其他檢視會阻止刪除該檢視。

mysql索引碎片整理 MysqL碎片整理優化

先來說一下什麼是碎片,怎麼知道碎片有多大!簡單的說,刪除資料必然會在資料檔案中造成不連續的空白空間,而當插入資料時,這些空白空間則會被利用起來.於是造成了資料的儲存位置不連續,以及物理儲存順序與理論上的排序順序不同,這種是資料碎片.實際上資料碎片分為兩種,一種是單行資料碎片,另一種是多行資料碎片.前...

mysql碎片整理 提速 MysqL碎片整理優化

先來說一下什麼是碎片,怎麼知道碎片有多大!簡單的說,刪除資料必然會在資料檔案中造成不連續的空白空間,而當插入資料時,這些空白空間則會被利用起來.於是造成了資料的儲存位置不連續,以及物理儲存順序與理論上的排序順序不同,這種是資料碎片.實際上資料碎片分為兩種,一種是單行資料碎片,另一種是多行資料碎片.前...

mysql碎片空間 mysql碎片應用

1.查詢結果集中自增功能 set i 0 select i i 1 id 2.資料庫備份 mysqldump database uroot p beifen.sql 3.資料庫表空間tablespace優化 show table status from database like table nam...