MySQL入門(二)

来源:https://www.cnblogs.com/ddqy/archive/2019/12/27/12110095.html
-Advertisement-
Play Games

1. MySQL架構 1.1 邏輯架構圖 1.1.1 Connection Pool: 連接池 * 管理緩衝用戶連接,線程處理等需要緩存的需求。 * 負責監聽對 MySQL Server 的各種請求,接收連接請求,轉發所有連接請求到線程管理模塊。每一個連接上 MySQL Server 的客戶端請求都 ...


 

 

1.  MySQL架構

1.1         邏輯架構圖

1.1.1   Connection Pool: 連接池

* 管理緩衝用戶連接線程處理等需要緩存的需求。

* 負責監聽對 MySQL Server 的各種請求,接收連接請求,轉發所有連接請求到線程管理模塊。每一個連接上 MySQL Server 的客戶端請求都會被分配(或創建)一個連接線程為其單獨服務。

* 連接線程的主要工作就是負責 MySQL Server 與客戶端的通信,接受客戶端的命令請求,傳遞 Server 端的結果信息等。線程管理模塊則負責管理維護這些連接線程。包括線程的創建,線程的 cache 等。

1.1.2   Parser: 解析器

* SQL命令傳遞到解析器的時候會被解析器驗證和解析

主要功能:

         a . SQL語句進行語義和語法的分析,分解成數據結構,然後按照不同的操作類型進行分類,然後做出針對性的轉發到後續步驟,以後SQL語句的傳遞和處理就是基於這個結構的。

         b.  如果在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的

1.1.3   Optimizer: 查詢優化器

* SQL語句在查詢之前會使用查詢優化器對查詢進行優化

*      它使用的是“選取-投影-聯接”策略進行查詢。

     用一個例子就可以理解: select uid,name from user where gender = 1;

* 這個select 查詢先根據where 語句進行選取,而不是先將表全部查詢出來以後再進行過濾

* 這個select查詢先根據uidname進行屬性投影,而不是將屬性全部取出以後再進行過濾

* 將這兩個查詢條件聯接起來生成最終查詢結果

1.1.4   CacheBuffer 查詢緩存

他的主要功能是將客戶端提交給MySQL select請求的返回結果集 cache 到記憶體中,與該 query 的一個 hash 值 做一個對應。該 Query 所取數據的基表發生任何數據的變化之後, MySQL 會自動使該 query Cache 失效。在讀寫比例非常高的應用系統中, Query Cache 對性能的提高是非常顯著的。當然它對記憶體的消耗也是非常大的。

如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據。這個緩存機制是由一系列小緩存組成的。比如表緩存,記錄緩存,key緩存,許可權緩存等

 

1.1.5   存儲引擎介面

存儲引擎介面模塊可以說是 MySQL 資料庫中最有特色的一點了。目前各種資料庫產品中,基本上只有 MySQL 可以實現其底層數據存儲引擎的插件式管理。這個模塊實際上只是 一個抽象類,但正是因為它成功地將各種數據處理高度抽象化,才成就了今天 MySQL 可插拔存儲引擎的特色。

註意:存儲引擎是基於表的,而不是資料庫。

1.2   MySQL的存儲引擎

* 多存儲引擎是mysql有別於其他資料庫的一大特性;

* 存儲引擎是針對錶的

* MySQL 5.5之後,預設的存儲引擎由MyISAM變為InnoDB

* MySQL引擎: 可以理解為,MySQL文件系統,只不過功能更加強大。

* MySQL引擎功能: 除了可以提供基本的存取功能,還有更多功能事務功能、鎖定、備份和恢復、優化以及特殊功能。

* 查看存儲引擎:show engines;

 

Innodb

Myisam

存儲文件

.frm 表定義文件

.ibd 數據文件

.frm 表定義文件

.myd數據文件 .myi 索引文件

表鎖、行鎖

表鎖

事務

ACID

不支持

CRDU

讀、寫

讀多

count

掃表

專門存儲的地方

索引結構

B+ Tree

B+ Tree

1.3   MySQL物理結構

1.3.1   日誌文件

MySQL通過日誌記錄了資料庫操作信息和錯誤信息。常用的日誌文件包括錯誤日誌、二進位日誌、查詢日誌、慢查詢日誌和 InnoDB 引擎線上 Redo 日誌、中繼日誌等。

錯誤日誌(error log):記錄mysql伺服器mysqld在啟動/關閉或運行過程中遇到的錯誤信息。(預設是開啟的,而且從5.5.7以後無法關閉錯誤日誌)

查詢日誌(query log):

普通查詢日誌(general query log):記錄客戶端連接信息和執行的sql語句信息。(預設情況下通用查詢日誌是關閉的。)

慢查詢日誌(slow query log):記錄執行時間超出指定值(long_query_time)sql語句。(預設是關閉的。需要通過設置:slow_query_log=ON進行開啟。)

二進位日誌(binary log):記錄數據被修改的相關信息。(預設是關閉的,需要通過配置:log-bin=mysql-bin進行開啟)

在配置文件中進行配置各日誌路徑

1.3.2   數據文件

查看MySQL數據文件:SHOW VARIABLES LIKE ‘%datadir%’;

l  .frm文件:主要存放與表相關的數據信息,主要包括表結構的定義信息

l  .ibd.ibdata文件:用來存儲InnoDB存儲引擎表數據和索引信息

l  .myd文件:主要用來存儲使用MyISAM存儲引擎的表數據信息

l  .myi文件:主要用來存儲使用MyISAM存儲引擎的表數據文件中任何索引的數據樹。

2.  MySQL索引

一般情況下,在沒有建立索引的時候,mysql需要掃描全表及掃描10W條數據找這條數據,如果我在nickname上建立索引,那麼mysql只需要掃描一行數據及為我們找到這條nickname='css'的數據,是不是感覺性能提升了好多咧....

mysql的索引分為單列索引(主鍵索引,唯一索引,普通索引)組合索引.

單列索引:一個索引只包含一個列,一個表可以有多個單列索引.

組合索引:一個組合索引包含兩個或兩個以上的列,

2.1   索引的創建

2.1.1  單列索引

1.      普通索引,這個是最基本的索引

sql格式是 :

CREATE INDEX IndexName ON `TableName`(`欄位名`(length))

或者

ALTER TABLE TableName ADD INDEX IndexName(`欄位名`(length))

2.      唯一索引,與普通索引類似,但是不同的是唯一索引要求所有的類的值是唯一的,這一點和主鍵索引一樣.但是他允許有空值,

sql格式是 :

CREATE UNIQUE INDEX IndexName ON `TableName`(`欄位名`(length));

或者 

ALTER TABLE TableName ADD UNIQUE (column_list)  

3.      主鍵索引,不允許有空值,(B+TREE中的InnoDB引擎中,主鍵索引起到了至關重要的地位)

主鍵索引建立的規則是 int優於varchar,一般在建表的時候創建,最好是與表的其他欄位不相關的列或者是業務不相關的列.一般會設為 int 而且是 AUTO_INCREMENT自增類型的

2.1.2  組合索引

一個表中含有多個單列索引不代表是組合索引,通俗一點講 組合索引是:包含多個欄位但是只有索引名稱

sql格式是 :

  CREATE INDEX IndexName On `TableName`(`欄位名`(length),`欄位名`(length),...);

2.2   索引的刪除

刪除索引的mysql格式 :

  DORP INDEX IndexName ON `TableName`;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 譯者前言 今天突然好奇C、C++和C#這三門語言都有個C,那麼它們之間到底有什麼關聯呢。所以就去Google了,找到了這篇文章:Understanding the Differences Between C#, C++, and C - C# Station。看完感覺寫得挺好的,就打算翻譯出來。 需 ...
  • 前端開發,學習Linux,記錄安裝中的一些問題,比如在安裝最小版後,如何由命令行轉為圖形界面等。 筆記中截圖參考其他資料。 下載文件 VMware 12: 鏈接:https://pan.baidu.com/s/1AhtOf_erXFylyc0nIsJ14A 提取碼:3lq6 CentOS 7: 鏈接 ...
  • 硬碟和主板的連接的地方:叫介面,硬碟的介面類型: iops:i/o per second:每秒的讀寫次數。 IDE(ata):並口(數據並行傳輸),理論最大傳輸 133MB/S;iops:100次 SCSI:並口,Ultrascsi320:320MB/s;Ultrascsi640:640MB/s;i ...
  • 1.centos已經配置好了SFTP,直接使用root用戶連接就可以,模式選SFTP即可。 2.雖然埠號沒有填寫,預設埠號是22 3.可能還是會遇到無法訪問的問題,可以進行iptables防火牆的配置,檢查22埠是否開放。 ...
  • 前提 代碼管理我是用Gogs.Git,前些陣子使用Nginx將git.balabiu.com反向代理到了Gogs的預設埠,其他二級功能變數名稱準備做其他使用, 導致上報代碼出現了錯誤。 問題 推送代碼報錯誤 解決 查了一下413錯誤,查到 ”通過post上傳文件過大時,會出現413錯誤碼“ ,初步確定了是 ...
  • mysql 如何設置遠程連接 聽語音 原創 | 瀏覽:2726 | 更新:2019-01-22 17:32 1 2 3 4 5 6 7 分步閱讀 mysql預設是不允許被遠程連接的,只有本地機器才能連接,那麼我們該怎麼樣設置Mysql才能允許其遠程連接呢,詳細方法如下 工具/原料 mysql lin ...
  • 三、事務的運行模式 通常,事務以3種模式運行,他們分別是: 1. 自動提交事務 每一條單獨的SQL語句都在其執行完成後進行自動提交事務,即執行 SQL 語句後就會馬上自動隱式執行 COMMIT 操作。如果出現錯誤,則進行事務回滾至之前狀態。 SQL SERVER和MY SQL中都預設開啟自動提交事務 ...
  • 二、事務基本命令介紹 說明:命令中, | (垂直條) 分隔括弧或大括弧中的語法項。 只能使用其中一項。[ ](方括弧) 可選語法項。 不要鍵入方括弧。{}(大括弧) 必選語法項。 不要鍵入大括弧。 1. SQL SERVER 1) BEGIN { TRAN | TRANSACTION } [ { t ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...