1. 程式人生 > >MySQL的索引和檢視

MySQL的索引和檢視

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;