mysql的一些高級用法

當我們掌握了mysql的基本操作,比如建表語句,簡單的sql語句等,我們還可以對mysql本身做一些配置操作,甚至是對Mysql進行優化。更多mysql高級知識請移步php中文網mysql教程頻道。

1、mysql的配置文件。

在windows中是my.ini文件:

1)、log-bin:表示主從復制的日志文件,用于主從復制。

2)、log-error=”SO3JFYNN8EW6GMO.err”:表示錯誤日志。

3)、server-id=1:表示本機的序號為1。

4)、datadir=D:/mysql5.7/Data:存放數據庫信息的目錄,

2、mysql的架構從上到下分成四層:
1)、連接層:連接處理,授權認證,相關的安全方案。

2)、服務層:完成sql的優化,分析,緩存等功能。

3)、引擎層:負責存儲和提取數據。

4)、存儲層:數據存儲層,主要將數據存儲在文件系統之中,并完成與引擎的交互。

3、mysql引擎

1)查看使用的引擎:

show engins或者show

MYISAM和INNODB的比較

不支持主外鍵值對;支持

不支持事務;支持

表鎖,不適合高并發;行鎖,適合高并發

只緩存索引;緩存索引和數據,對內存要求更高

表空間小;表空間大

關注點在性能,更多情況下適合查詢多的情況;關注點事務。

4、mysql性能優化下降原因

1)、查詢語句寫的爛

2)、索引失效

? ? ? ? 單值索引 ? ? ? ? ? ??

? ? ? ? ? ? ? ? create ?index ?idx_user_name ? on user(name)

? ? ? ? 復合索引

? ? ? ? ? ? ? ? create ?index ?idx_user_name_email ?on user(name,email)

3)、查詢有太多的join

4)、服務器調優及各個參數

5、mysql的執行順序?

? ? ? ? ?機器從from開始讀。

?1)、內連接

? ? ? ? ? select ?*from ?tableA ?A ?inner join ?tableB B ?on ?A.key=B.key。

2)、左外連接

? ? ? ? ? select ?*from ?tableA ?A ? left ?join ? tableB B ?on A.key= B.key

? ? ? ? ? 當b沒有的,用null補全。

3)、右外連接

? ? ? ? ? select ? *from ?tableA ? A ? right ?join ? tableB ?B ?on ? A.key=B.key

? ? ? ? ? 當a沒有時,用null補全

4)、左外連接,去除右表部分

? ? ? ? ? select ? *from ?tableA ?A ? ?left ?join ? ?tableB ?B ? on ? A.key=B.key ?where ? B.key is null

? ? ? ? ? ?a的獨有,這此時b的用null補齊,所以此時b是為空的。

5)、右外連接,去除左表部分

? ? ? ? ? ?select ?*from ?tableA A ?right ?join ?tableB ?B ? on A.key = B.key ?where A.key ?is null

6)、全連接(可以采用兩者相加)union 可以組合并去重

? ? ? ? ? select ? *from tableA A left join tableB B ? on ? A.key=B.key ?union

? ? ? ? ? ?(select *from tableA ?A ?right join tableB B )

7)、中心空出來

?select ? *from tableA A left join tableB B ? on ? A.key=B.key ?where B.key is null union

? ? ? ? ? ?(select *from tableA ?A ?right join tableB B ?on ? A.key=B.key ?where A.key is null)

6、什么是索引

1)、索引是一種數據結構,在于提高查找效率。

? ? ? ? 排好順序的快速查找數據結構。

?數據庫維護著滿足特定算法的數據結構,這種數據結構以

某種方式指向數據,這樣可以在這些數據結構上實現高級的超找

算法,這種數據結構稱為索引。?

?BTREE索引(沒有特殊指定的情況下)

頻繁刪改的字段,不適合建索引。

2)、優勢

提高數據檢索的效率,降低數據庫的io成本

通過索引列對數據進行 排序,降低數據排序的成本,降低了cpu的消耗

3)、劣勢

索引也是一張表,占磁盤空間。

更新表時要維護索引,會降更新效率。

索引只是一個提高效率的因素,建立索引需要花時間和精力。

4)、單值索引,只包含一個列,一張表可以有多個單值索引。

5)、唯一索引,索引列的值必須唯一,允許為空。

6)、復合索引,包含多個列。

?7)、索引的相關操作

create ? index ?idx_user_name on user(name)

alter ?user ?add index ?idx_user_name on (name)

show index from user

drop index idx_user_name on user

8)、索引結構

Hash索引

full-text全文索引

R-Tree 索引

BTree索引 :

7、哪些情況要創建索引:

1)、主建自動建立唯一索引

2)、頻繁作為查詢條件的字段應該創建索引

3)、查詢中與其他表關聯的字段,外建關系建立索引。

4)、頻繁更新的字段,不適合創建索引

5)、where條件里用不到的字段補創建索引。

6)、單建或者組合索引的選擇問題,在高并發下傾向于創建復合索引

7)、查詢中排序的字段,排序的字段如果按照索引去訪問,將提高效率

8)、查詢中統計或者分組字段

8、哪些情況不需要創建索引:

1)、表記錄太少

2)、經常增刪的表

3)、數據重復且分布平均的字段。

9、性能分析:

mysql query optimizer

以上是我總結的一些Mysql進階的知識,希望對大家有所幫助。

相關文章:

mysql教程

mysql教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊6 分享