標籤:mysql 資料存放區 資料表空間 表
mysql的資料在磁碟上的儲存:
資料區塊:
由多個磁碟block組成的塊,儲存引擎負責管理資料區塊。
磁碟是block塊裝置,資料在磁碟上的存放也是按照塊存放的。
mysql讀取表到記憶體的時候,也必許按照一塊一塊的方式讀取。假設要查詢的表在和其他表在都在同一個塊內。載入塊的時候除了讀取要查詢的表,其他表也一併被讀取出來。
當一個塊內的部分表被刪除時,這是就是形成了片段。這樣會降低裝載到記憶體的速度。
所以會產生一個塊頭,記錄一個快內表的大小,有無空閑空間,空閑空間的位置。
檔案的記錄組織類型:
堆檔案組織:
把行簡單的堆起來,沒有順序,記錄可能在檔案的任何地方。
查詢效率低
循序檔組織:
把行按照某欄位(搜尋碼、排序碼)的值順序記錄。
更新代價大。
散列檔案組織:
人為將表分成多個部分,每個部分稱為桶。根據行中的某個或某些欄位做使用散列函數做雜湊運算,運算結果屬於某個範圍的放在指定的桶中。多個桶組成一個表。
桶有可能溢出。所以要選定一個合適散列函數,讓行平均在各個桶中。
表的組成:
表是由表定義和表資料群組成的。和block=inode+data類似。
表定義:表的結構,欄位類型和長度等。
表資料:欄位的屬性值。
資料表空間(table space):
用於實現將多個表的資料群組織在一個資料檔案中的一個邏輯管理組件。是一種進階的空間管理器。有點類似於邏輯卷。
資料字典(data directory):
各種關係的中繼資料。
關係的名字
欄位名稱
欄位類型和長度
視圖
完整性條件約束
使用者的名字
許可權
使用者的密碼
...
mysql的資料儲存:
MyISAM:
*.frm 表結構定義檔案
*.MYD 表資料檔案
*.MYI 表索引檔案
InnoDB:
所有表共用一個資料表空間檔案。即把眾多表示資料檔案放在一個檔案內。這個檔案叫做資料表空間檔案。
建議分開存放。
修改後的檔案:
*.frm 表結構定義檔案
*.opt 選項檔案。包含預設字元集和定序。
*.ibd 資料表空間(表資料和表索引)
方法如下:
mysql>SHOW VARIABLES LIEK ‘%innodb%‘; 查看和innodb相關的會話變數。
innodb_file _per_table OFF 預設是不啟用。
#vim /etc/my.cnf
[mysqld]
innodb_file_per_table = 1
#systemctl reload mysqld
mysql>SHOW GLOBAL VARIABLES LIEK ‘%innodb%‘; 查看innodb的全域變數。
mysql初始化後,預設mysql資料庫的格式是MyISAM。其他的資料庫的格式取決於預設設定
查看mysql支援的儲存引擎:
mysql>SHOW ENGINES;
表頭行中:
Engine 引擎名稱
Suuport YSE表示支援,DEFAULT表示為預設引擎
Commnet 描述資訊
Transaction 是否支援事務
XA 是否支援分散式交易
Savepoint 是否支援儲存點,支援事務的引擎才支援儲存點
查看錶的狀態資訊:
mysql>SHOW TABLE STATUS [FROM|IN DBNAME] [LIKE ‘PATTERN’|WHERE EXPR]
例如:
mysql>USE mysql
mysql>SHOW TABLE STATUS LIKE ‘user‘ \G 查看mysql庫中user表的狀態資訊
查看伺服器支援的字元集:
mysql>SHOW CHARACTER SET;
查看伺服器支援的定序:
mysql>SHOW COLLATION;
執行個體:
1.顯示字元集和定序:
mysql>SHOW CHARACTER SET; 顯示字元集
mysql>SHOW COLLATION; 顯示定序
2.建立資料庫,指定字元集為gbk,定序為gbk_chinese_ci
mysql>CREATE DATABASE IF NOT EXISTS test CHARACTER SET ‘gbk‘ COLLATE ‘gbk_chinese_ci‘;
或
mysql>CREATE SCHEMA IF NOT EXISTS test CHARACTER SET ‘gbk‘ COLLATE ‘gbk_chinese_ci‘;
3.刪除資料庫:
mysql>DROP DATABASE test;
4.資料庫重新命名:
一般情況下,資料庫是不能重新命名的,以下方法也不建議使用。
思路:資料庫本質上也是幾個檔案的組成,只要修改檔案的檔案名稱即可變相的改變資料庫的名字。
#mysqladmin shutdown
#cd $DATA_DIR
#mv test.* abc.*
#service mysqld start
5.向courses表中插入資料:
mysql>INSERT INTO courses (CourName) values (‘httpd‘),(‘dns‘),(‘mysql‘);
mysql>SELECT * FROM courses; 查看錶的資料
mysql>SHOW INDEXES FROM courses; 查看錶的索引
本文出自 “小私的blog” 部落格,請務必保留此出處http://ggvylf.blog.51cto.com/784661/1679322
mysql之mysql資料在磁碟的儲存方式