MYSQL5- 聯合索引 & 外/內連接查詢 & 子查詢

建立了三個表
在這裏插入圖片描述
在這裏插入圖片描述
一對一連接:
將一個表的主鍵插入到另外一個表裏
一對多連接:
要創建中間表

JOIN 連接

JOIN 按照功能大致分爲如下三類:
INNER JOIN(內連接,或等值連接):獲取兩個表中字段匹配關係的記錄。
LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。
在這裏插入圖片描述在這裏插入圖片描述

外連接查詢

帶in的子查詢:(查找買過東西的人的信息 通過訂單中的orderid查詢)
在這裏插入圖片描述

內連接查詢

查找買過東西的用戶的信息
在這裏插入圖片描述
小表是整表的搜索 用小表的id去大表裏查詢 不用產生存儲臨時數據的中間表(a,b是別名)
建索引給大表 用小表id去大表裏找

左鏈接查詢

查右邊的表沒有的左邊的數據
查沒有買過東西的用戶的信息
在這裏插入圖片描述在這裏插入圖片描述

索引

在這裏插入圖片描述

B+樹即排序的樹

主鍵默認就建索引
在這裏插入圖片描述上圖中--------
給name字段添加索引後:

  • 主鍵索引樹 放的是所有的值
  • 輔助索引樹放的是當前的索引+主鍵id

對於select name,id from user where name=‘wang’;
不用回到主鍵索引樹

對於select name,id,age from user where name='wang';
要搜age得去主鍵索引樹上找 因爲name的輔助索引樹只存了name和主鍵id 並沒有存儲age

所以select後面最好指定自己要搜索的東西 不然寫*的話就得輸出全部信息就得回到主鍵索引樹上

創建聯合索引

在這裏插入圖片描述create index name age index on user(name,age);
聯合索引樹放name age 和主鍵id

select *from user where age =18

這句用不到聯合索引 因爲聯合索引先找第一個字段name 而這句找的age

數據庫項目的優化地方

用explain 查看代碼中操作比較慢的地方
創建的多列聯合索引在用到的時候注意會先找第一個字段
有過濾條件 還有分組 一定要建立聯合索引
設置合理的慢查詢時間,查看慢查詢日誌中執行得慢的代碼 對其進行優化
在這裏插入圖片描述

select *from user where a=3 or b=4;

可能會直接整表查找 但是也會被MySQL Server優化

select *from user where a=3 union select *from user where b=4;

第一次查詢a的索引,第二次查詢b的索引,查詢兩次 然後把這兩次查詢聯合起來

在建表的時候建索引:
在這裏插入圖片描述

給已經建好的表建索引以及刪除索引:
在這裏插入圖片描述
查看我建好的索引的話需要具體到建的鍵 比如給name建了索引 需要用where定位到name=’’
可以看到主鍵已經加到了age上
在這裏插入圖片描述

記錄慢查詢日誌和 慢查詢時間

在這裏插入圖片描述

  • explain+SQL語句 查看SQL語句的執行計劃
  • 兩個表(A表和B表)的聯合查詢SQL語句,小表決定查詢次數,大表決定查詢時間
  • 索引以 磁盤文件的方式 進行存儲
  • 使用索引–》 從磁盤文件讀取索引文件(磁盤I/O的次數 越少越好) 把索引文件裏面的數據讀取到內存上,進行組織
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章