mysql考察 mysql資料庫考察點

2021-10-18 03:24:48 字數 2769 閱讀 3050

1、基礎考察點

整數型別

長度可以為整數型別指定寬度。

int(3)輸入的是1234超過了可以繼續儲存,不受影響,只是在寬度不夠時用0填充

實數型別

float、double、decimal

decimal可儲存比bigint還大的整數;可以用於儲存精確的小數

float和double型別支援使用標準的浮點進行近似計算。

字串型別

varchar、char、text、blob

varchar型別用於儲存可變長字串,它比定長型別更節省空間

varchar使用1或2個額外位元組記錄字串的長度。

varchar長度,如果儲存內容超出指定長度,會被截斷

char是定長的,根據定義的字串長度分配足夠的空間

char會根據需要採用空格進行填充以方便比較

char長度,超出設定的長度,會被截斷

char和varchar的優缺點:

1、對於經常變更的資料,char比varchar更好,char不容易產生碎片。

2、對於非常短的列,char比varchar在儲存空間上更有效率。

3、只分配真正需要的空間,更長的列會消耗更多的記憶體。

盡量避免使用blob和text型別,查詢會使用臨時表,導致嚴重的效能開銷。

日期和時間型別

盡量使用timestamp,比datetime空間效率高

列屬性auto_increment、 default、not null zerofill

mysql資料表引擎

innodb表引擎

預設事務型引擎。資料儲存在共享表空間,可以通過配置分開。

對主鍵查詢的效能高於其他型別的儲存引擎。

內部做了很多優化,從磁碟讀取資料時自動在記憶體構建hash索引。

支援崩潰後的安全恢復

支援行級鎖、支援外來鍵

myisam表引擎

5.1版本千,myisam是預設的儲存引擎

擁有全文索引、壓縮、空間函式。

不支援事務和行級鎖,不支援崩潰後的安全恢復

表儲存在兩個檔案,myd和myi

mysql的鎖機制

讀鎖:共享的,不堵塞,多個使用者可以同事讀乙個資源,互不干擾

寫鎖:排他的,乙個寫鎖會阻塞其他的寫鎖和讀鎖,這樣可以只允許乙個人進行寫入,防止其他使用者讀取正在寫入的資源。

鎖粒度:

表鎖:系統效能開銷最小,會鎖定整張表,myisam使用表鎖。

行鎖,最大程度地支援併發處理,但是也帶來了最大的鎖開銷,innodb實現行級鎖。

索引對效能的影響

①大大減少伺服器需要掃瞄的資料量

②幫助伺服器避免排序和臨時表

③將隨機i/o變順序i/o

④大大提高查詢速度,降低寫的速度,占用磁碟

索引的使用場景

對於非常小的表,大部分情況下全表掃瞄效率更高。

中到大型表,索引非常有效。

特大型的表,建立和使用索引的代價將隨之增長,可以使用分割槽技術解決。

2.索引的型別

索引有很多態別,都是實現在儲存引擎層的

普通索引:最基本的索引,沒有任何約束限制。

唯一索引:與普通索引類似,但是具有唯一性約束

主鍵索引:特殊的唯一索引,不允許有空值。

組合索引:將多個列組合在一起建立索引,可以覆蓋多個列

外來鍵索引:只有innodb型別的表才可以使用外來鍵索引,保證資料的一致性,完整性和實現級聯操作。(一般不適用)

全文索引:mysql自帶的全文索引只能擁有myisam,並且只能對英文進行全文檢索。(一般不適用)

mysql索引的建立原則

1.最適合索引的列是出現在where子句中的列,或連線子句中的列而不是出現在select關鍵字後的列。

2.索引列的基數越大,索引的效果越好。

3.對字串進行索引,應該制定乙個字首長度,可以節省大量的索引空間

4.根據情況建立復合索引,復合索引可以提高查詢效率

5.避免建立過多索引,索引會額外占用磁碟空間,降低寫操作效率

6.主鍵盡可能選擇較短的資料型別,可以有效減少索引的磁碟占用提高查詢效率。

索引的注意事項:

1.復合索引遵循字首原則。

2.like查詢,%不能在前,可以使用全文索引。

3.column is null 可以使用索引

4.如果mysql估計使用索引比全表掃瞄更慢,會放棄使用索引。

5.如果or前的條件中的列有索引,後面的沒有,索引都不會被用到

6.列型別是字串,查詢時一定要給值加引號,否則索引失效。

mysql的sql語句

update a set a.c1=b.c1,a.c2=b.c2 where a.id=b.id and b.age>50

關聯查詢

內連線(inner join)、外連線(left join)、聯合查詢(union與union all)、全連線(full join)

union 聯合查詢的列數要相等,相同的記錄會合併。

如果使用union all,不會合併重複的記錄行。

team表

match表

select t1.teamname,m.matchresult,t2.teamname,m.matchtime from match as m

left join team as t1 on m.hostteameid=t1.teamid,

left join team as t2 on m.guestteameid =t2.guestteameid

where matchtime between "2006-6-1" and "2006-7-1"

mysql資料庫效能資料 MYSQL資料庫效能優化

1.選取最適用的字段屬性 表中字段的寬度設得盡可能小 char 的上限為 255 位元組 固定占用空間 varchar 的上限 65535 位元組 實際占用空間 text 的上限為 65535。盡量把字段設定為 not null,執行查詢的時候,資料庫不用去比較 null 值。2.使用連線 join...

MySQL資料庫使用 MySQL資料庫管理

開發時一般不使用系統的root使用者,應該是建立乙個新的使用者,管理乙個工程。登入使用者的命令 mysql uusername p 登入完成後就進入sql命令格式,格式以 結尾。windows用安裝的時候設定的root登入命令列,如下圖所示。linux安裝時若沒有提示設定root密碼的,可以使用系統...

MySQL資料庫 一 MySQL資料庫簡介

mysql資料庫是常見的資料庫,對mysql資料庫的學習主要從下面幾方面展開,記得點開檢視哦!1.mysql c s架構 mysql的架構是c s架構,即客戶端 伺服器的架構 在root使用者下進行 mysql字元編碼 檢視mysql預設的字元編碼 預設的字元編碼是latin1 show varia...