MySQL 表的連線 索引

2021-08-30 22:00:45 字數 3711 閱讀 4603

一、表的連線

首先表的連線分為兩種,一種是內連線一種是外連線。

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子句中的字段不應該建立索引(也就意味著這個欄位不需要進行查詢)。

mysql 表的連線方式 Mysql表的連線方式

mysql表的連線方式 1.交叉連線 笛卡爾積 交叉聯接返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉聯接也稱作笛卡爾積。sql語句 select from 表1,表2 隱士笛卡爾積 select from 表1 crross join 表2 顯示笛卡爾積 不帶條件的內連線也是笛卡爾積...

mysql表連線sql表 MYSQL表連線查詢

表連線查詢 一 交叉連線 笛卡爾積 查詢teacher和course表中所有的資料 select from teacher,course select name,courseid,course.id,cname from teacher,course where teacher.courseid c...

mysql 表 索引 mysql 為表新增索引

索引作用 在索引列上,除了上面提到的有序查詢之外,資料庫利用各種各樣的快速定位技術,能夠大大提高查詢效率。特別是當資料量非常大,查詢涉及多個表時,使用索引往往能使查詢速度加快成千上萬倍。例如,有3個未索引的表t1 t2 t3,分別只包含列c1 c2 c3,每個表分別含有1000行資料組成,指為1 1...