1. 程式人生 > >MySQL——表的連線、索引

MySQL——表的連線、索引

一、表的連線
首先表的連線分為兩種,一種是內連線一種是外連線。
1.內連線:內連結其實就是使用where語句形成笛卡兒積對錶的內容進行篩選,內連結在查詢中是使用最多的。
select 欄位 from 表1 inner join 表2 on 連線條件 and 其他條件;
select 欄位 from 表1 where 表1屬性=表2屬性;
2.外連線
(1)左外連線:如果我們使用聯合查詢,就會讓左側的表完全顯示。
select 欄位名 from 表1 left join 表名2 on 連線條件。
(2)右外連線:如果我們聯合查詢,右邊的表將完全顯示。
select 欄位 from 表名1 right 表名2 on 連線條件;
二、索引特性(重點)
1.索引的概念
索引主要是在提高資料庫的效能,它不用加記憶體,不用改程式,不用調sql,只需要我們執行正確的create index,查詢速度就可以提高上百倍。但是任何一個東西都是有利也有弊,索引也是一樣的,雖然它提高我們查詢資料的效能,但是它的更新、刪除的速度減慢了,這些操作增加了大量的IO。所以索引的最大好處在於它可以提高檢索的效率。使用索引之所以會降低增加、刪除、更新這些速度,是因為檢索採用的是資料結構中的二叉樹,它的改變會引起這個搜尋二叉樹的序列變化,所以需要重新改變它的搜尋序,這樣就會降低速度高;而查詢之所以快是因為查詢的時候通過二叉樹採用的二分查詢,所以它的效率高。索引的原理說明:第一它佔用磁碟空間;第二當增加一條記錄的時候,除了新增到表中還需要維護二叉樹;第三當增加一個索引不能解決問題的時候,需要分別給欄位建立索引;第四,索引是以空間換時間。索引主要用在海量資料的檢索;
2.常見索引
*主鍵索引(primary key)
*唯一索引(unique)
*普通索引(index)
*全文索引(fulltext)–解決中子文索引問題(只有MySIAM儲存引擎支援)
3.建立索引
(1)建立主索引
第一種方式:建立表的時候,直接在欄位後面指定primary key;
create table user1(id int primary key,name varchar(30));
第二種方式:在建立表的最後,指定某列或某幾列為主鍵索引;
create table user2 (id int,name varchar(30),primary key(id));
第三種方式:建立表以後再新增主鍵;
create table user3(id int,name varchar(30));
alter table user3 add primary key(id);
*主鍵索引的特點:
主鍵約束的特點+主鍵索引可以提升檢索效率
(2)唯一索引的建立
第一種方式:在定義表時在某列後面直接用unique修飾;
create table user4(id int primary key,name varchar(30) unique);
第二種方式:建立表後在表的後面指定某列或某幾列為unique;
create table user5(id int name varchar(30),unique(name));
第三種方式:建立表以後再新增唯一鍵;
create table user3(id int primary key,name varchar(30));
alter table user3 add unique(id);
*唯一鍵索引特點:
多個一個表中,可以有多個唯一索引,查詢效率高;如果在某一列建立唯一索引必須保證這列不能有重複資料;如果一個唯一索引上指定not null,等價於主鍵索引。
(3)普通索引的建立
第一種方式:在表的最後定義,指定為某列的索引
create table user8(id int primary key,name varchar(30),email varchar(30),index(name));
第二種方式:建立表以後指定某列為普通索引
create table user9(id int primary key,name varchar(20),email varchar(30));
alter table user9 add index(name);
第三種方式:建立一個索引名為什麼的索引;
create table user10(id int primary key,name vrchar(20),email varchar(30));
create index idx_name on user10(name);
*普通索引的特點:一個表可以有多個普通索引,如果某列需要建立索引,但是該列有重複的值我們就使用普通索引。
(4)全文索引的建立
當文章需要對大量的文字進行檢索的時候,會使用全文索引。儲存引擎MyISAM會提供全文索引的功能,並且預設的全文索引支援英文,不支援中文。

create table articles(
id int not null primary key,
title varchar(200),
body text,
fulltext(title,body)
)engine=MyISAM;

檢視儲存引擎的型別:關鍵字為explain
explain select * from articles where body like ‘%database%’\G
注意:\G表示垂直展示
在這裡插入圖片描述
最後查詢出來的結果中type這一行表示索引的型別,對於全文索引就是full。
重點:資料庫的優化
        對於資料庫的優化,需要用到索引,但是具體的使用方法是:先用explain關鍵字看一下該表中是否有用到索引,如果沒有那麼你就可以根據不同的需求新增不同的索引,比如需要多欄位的檢索,那麼肯定就會使用到全文索引,如果是不重複用到唯一鍵索引等等,新增索引以後執行sql語句檢驗看是否有提高效率,如果沒有,那麼再使用explain關鍵字查詢看索引是否有生效。
4.索引的查詢
第一種方法:show keys from 表名
查詢的結果表示的意思:
在這裡插入圖片描述


第二種查詢方法:show index from 表名;
第三種查詢方法(資訊簡略):desc 表名;
5.索引的刪除
第一種方法——刪除主鍵索引:alter table 表名 drop primary key;
第二種方法——刪除其他索引:alter table 表名 drop index 索引名;
其中索引名就是show keys from 表名\G 中的key_name欄位;
第三種方法:drop index 索引名 on 表名
eg:drop index name on user8;
6.索引的建立原則
(1)同一個表裡的索引名是不能重複的,但是在同一個資料庫裡可以重複;
(2)在查詢欄位時查詢條件比較繁瑣的時候應該建立索引;
(3)唯一性太差的欄位就算是頻繁查詢也不適合單獨建立索引;
(4)更新比較頻繁的欄位也不適合建立索引,因為更新二叉樹需要花太多的時間;
(5)不會出現在wher這個e子句中的欄位不應該建立索引(也就意味著這個欄位不需要進行查詢)。