查詢當前默認存儲引擎
SHOW VARIABLES LIKE 'table_type' ;
查詢當前數據庫支持的引擎有哪些 :
SHOW ENGINES \G -- 推薦這種 , 顯示更多信息
SHOW VARIABLES LIKE 'have%' ;
建表時指定存儲引擎
CREATE TABLE tbl_name (
col_1 BIGINT(20) NOT NULL AUTO_INCREMENT
,col_2 VARCHAR(15)
, PRIMARY KEY(col_1)
) ENGINE = MyISAM DEFAULT CHARSET = gbk ;
修改已有表的存儲引擎
ALTER TABLE tbl_name SET ENGINE = InnoDB ;
展現建表語句
SHOW CREATE TABLE tbl_name \G
給MEMORY存儲引擎的表指定 HASH/TREE索引
CREATE INDEX xxx_index USING HASH/TREE ON tbl_memory(col_xxx) ;
查詢索引信息
SHOW INDEX FROM tbl_memory \G
更換索引(須要兩步操做:先drop再create)
DROP INDEX xxx_index ON tbl_memory ;
CREATE INDEX xxx_else_index USING BTREE on tbl_memory(col_xxx) ;
MEMORY 使用心得 :
MySQL啓動時 使用 --init-file 選項 , 利用 `INSERT INTO .. SELECT .. ` 或者 `LOAD DATA INFILE` 語句 , 能夠從持久穩固的數據源加載數據 .
當不須要MEMEOY表時 , 執行 `DELETE FROM` 或 `TRUNCATE TABLE` 或 `DROP TABLE` 語句來釋放內存 .
MERGE存儲引擎的使用 :
CREATE TBALE xxx_01 ..
CREATE TABLE xxx_02 ..
CREATE TABLE xxx_merge(
col_1 xxx
,col_2 xxx
,INDEX (xxx)
) ENGINE = merge UNION(xxx_01 , xxx_02) INSERT_METHOD=LAST
向xxx_01 /xxx_02 表中跟新數據都會影響 xxx_merge表 ,
而向xxx_merge表中插入數據的時候 , 會影響xxx_02表 , 由於INSERT_METHOD = LAST ;
而且 即便 插入表的數據 是符合 xxx_01 的 , 好比時間 , 也不會智能的插入到xxx_01中 ,這也是和分區表不一樣的地方.
存儲引擎的選擇 :
MyISAM : 讀和插入 操做多 , 而更新和刪除操做少 , 而且對事務完整性/併發性 要求不是很高的 場景
InnoDB : 適合 併發性/事務完整性 要求高 , 有許多 更新/刪除操做的 場景 ; 提供了完整提交(commit) 和事務回滾(rollback)
MEMORY : 數據保存在緩存中 , 能夠提供快速定位. 缺陷 大小有限制 , 適合更新不頻繁的小表 . 還要注意 數據庫異常 後 數據是能夠恢復 ;
MERGE : 用於將一系列等同的MyISAM表 以邏輯方式組合在一塊兒,並做爲一個對象引用它們.
優勢在於能夠突破對單個MyISAM表大小的限制.
經過將不一樣的表分佈在多個磁盤上,能夠有效地改善MERGE表的訪問效率.對數據倉儲等VLDB環境十分適合.