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...