MySQL的索引和檢視
阿新 • • 發佈:2018-12-21
MySQL的表複製
複製表結構
mysql> create table 目標表名 like 原表名;
複製表資料
mysql> insert into 目標表名 select * from 原表名; /* 求目標表存在*/
資料表的索引操作
PRIMARY, INDEX, UNIQUE 這3種是一類
PRIMARY 主鍵。 就是 唯一 且 不能為空。
INDEX 索引,普通的
UNIQUE 唯一索引。 不允許有重複。
FULLTEXT 是全文索引,用於在一篇文章中,檢索文字資訊的
MySQL索引的建立對於MySQL的高效執行是很重要的,索引可以大大提高MySQL的檢索速度
打個比方,如果合理的設計且使用索引的MySQL是一輛蘭博基尼的話,那麼沒有設計和使用索引的MySQL就是一個人力三輪車
但過多的使用索引將會造成濫用。因此索引也會有它的缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對錶進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要儲存資料,還要儲存一下索引檔案
// 使用alter建立 alter table user add index index_name(欄位名) alter table user add unique unique_name(欄位名) alter table user add primary key(欄位名) // 使用 alter刪除索引 alter table user drop index index_name /*刪除普通索引和唯一索引*/ alter table user drop primary key /* 刪除主鍵(必須先刪除自動遞增)*/ // 修改表結構: alter table user add aaa int after bbbb; alter table user modify username varchar(20);
//顯示索引資訊
//你可以使用 SHOW INDEX 命令來列出表中的相關的索引資訊。可以通過新增 \G 來格式化輸出資訊。
mysql> SHOW INDEX FROM table_name; \G
Non_unique: 0 /*索引不能包括重複值,則為0*/ Key_name: unique_name /*索引名稱*/ Seq_in_index: 1 /* 索引的序列號 從1開始*/ Column_name: tid /**/ Collation: A /*儲存的索引方式 A為升序 Null表示無分類*/ Cardinality: 12 /*表示索引唯一值得估計數*/ Sub_part: NULL /*如果列只是被部分地編入索引,則為被編入索引的字元的數目。 如果整列被編入索引,則為NULL。*/ Packed: NULL /*關鍵字壓縮,如果沒有壓縮為空*/ Null: YES /*如果列包含NULL的值 就為yes*/ Index_type: BTREE /*索引方法(BTREE, FULLTEXT, HASH, RTREE)*/
MySQL檢視
關係型資料庫中的資料是由一張一張的二維關係表所組成,簡單的單表查詢只需要遍歷一個表,而複雜的多表查詢需要將多個表連線起來進行查詢任務。
對於複雜的查詢事件,每次查詢都需要編寫MySQL程式碼效率低下。為了解決這個問題,資料庫提供了檢視(view)功能。
檢視儲存的並不是真實的資料,而是一張虛擬的表,不佔用記憶體空間,只是儲存了計算需要的sql語句,每次呼叫的的時候都會自己呼叫封存的sql語句,從而提高了重用性。並且檢視顯示的內容會跟原檔案同步。
檢視是一個虛擬表,其中沒有資料,所以,當通過檢視更新資料時,其實,是在更新基本表中的資料,如果對檢視中的資料進行增加,或者刪除操作時,實際上是在對其基本表中的資料,進行增加或者刪除操作
建立檢視:
mysql> create view v_t1 as select * from t1 where id>4 and id<11;
Query OK, 0 rows affected (0.00 sec)
view檢視的幫助資訊:
mysql> ? view
ALTER VIEW /*語句修改檢視*/
CREATE VIEW
DROP VIEW
檢視檢視:
mysql> show tables;
UPDATE語句更新檢視 :
UPDATE view_stu SET a=100;
通過檢視變更資料:
INSERT INTO v_order(pid,pname,price) VALUES('p01','秋神','34');
刪除檢視v_t1:
mysql> drop view v_t1;