Mysql優化一

来源:https://www.cnblogs.com/ys1109/archive/2019/11/04/11792565.html
-Advertisement-
Play Games

Mysql優化 一、存儲引擎 1.查看所有引擎 2.查看預設存儲引擎 3.MyISAM和InnoDB | 對比項 | MyISAM | InnoDB | | : : | : : | : : | | 主外鍵 | 不支持 | 支持 | | 事務 | 不支持 | 支持 | | 行表鎖 | 表鎖,即使操作一 ...


Mysql優化

一、存儲引擎

1.查看所有引擎

SHOW ENGINES;

2.查看預設存儲引擎

show VARIABLES LIKE '%STORAGE_engine%';

3.MyISAM和InnoDB

對比項 MyISAM InnoDB
主外鍵 不支持 支持
事務 不支持 支持
行表鎖 表鎖,即使操作一條記錄也會鎖住整個表,不適合高併發的操作 行鎖,操作時只鎖某一行,不對其他行有影響,適合高併發的操作
緩存 只緩存索引,不緩存真實數據 不僅緩存索引還要緩存真實數據,對記憶體的要求較高,而且記憶體的大小對其性能有決定性的影響
表空間
關註點 性能 事務
預設安裝 YES YES

二、SQL執行載入順序

From left_table
on join_condition
<join_type> join right_table
where where_condition
group by group_condition
having having_condition
select
distinct select_list
order by orderBy_condtion
limit limit_num

三、索引

1.定義

索引是幫助Mysql高效獲取數據的數據結構。——>本質:數據結構。

其目的在於提高查詢效率,可以類比於字典,可以簡單理解為排好序的快速查找數據結構

數據本身之外,資料庫還維護著一個滿足特定查找演算法的數據結構,這些數據結構以某種方式指向數據,這樣就可以在這些數據結構的基礎上實現高級查找演算法,這種數據結構就是索引。

通常說的索引如果沒有特別指明,說的都是B樹(多路搜索樹,並不一定是二叉的)結構組織的索引。其中聚集索引、次要索引、覆蓋索引、複合索引、首碼索引、唯一索引預設都是使用B+樹索引,統稱索引。當然,除了B+樹這種類型的索引之外,還有哈希索引等

索引會影響到查找和排序

一般來說索引也很大,不可能全部存儲在記憶體中,因此索引往往以索引文件的方式存儲在磁碟上。

2.特點

優點:提高數據檢索的效率,降低了資料庫的IO成本。

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

缺點:實際上索引也是一張表,該表保存了主鍵與索引欄位,並指向實體表的記錄,所以索引也是占用空間的。

​ 雖然其大大調高了查詢速度,同時卻會降低更新表的速度。因為更新表時不僅要保存數據,還要保存一下 索引文件每次更新添加了索引列的欄位,都會調整因為更新所帶來的鍵值變化後的索引信息。

​ 索引只是提高效率的一個因素,如果你的資料庫擁有大量的表,就需要花時間研究建立最優秀的索引,或 優化查詢。

3.分類

  • 單值索引

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

  • 唯一索引

    索引列的值必須唯一,但允許有空值

  • 複合索引

    一個索引包含了多個列

4.基本語法

創建:UNIQUE是唯一索引, columnname只有一個是單值索引,有多個為複合索引

CREATE [UNIQUE] INDEX indexname on tablename(columnname1, columnname2...)
or
ALERT tablename add [UNIQUE] INDEX [indexname] on (columnname1, columnname2...)

刪除:

DROP INDEX [indexname] on tablename

查看

SHOW INDEX FROM tablename

5.適合建立索引的情況

  1. 主鍵自動建立唯一索引
  2. 頻繁作為查詢條件的欄位應該創建索引
  3. 查詢中與其他表關聯的欄位,外鍵關係建立索引
  4. 查詢中排序的欄位,排序欄位若通過索引去訪問,將大大提高排序速度
  5. 單鍵/組合索引的選擇問題(高併發適合創建組合索引)
  6. 查詢中統計或分組的欄位

6.不適合創建索引的情況

  1. 頻繁更新的欄位

  2. where條件里用不到的欄位

  3. 表記錄太少

  4. 數據重覆且分佈平均的表欄位,因此應該只為最經常查詢和最經常排序的數據建立索引

    索引的選擇性=不同的數目/總數目


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

-Advertisement-
Play Games
更多相關文章
  • 預設已安裝Prometheus服務,服務地址:192.168.56.200 一、獲取交換機snmp信息 snmp服務IP(交換機IP):172.20.2.83 snmp community:dfetest 二、部署 snmp_exporter 2.1 下載snmp_exporter 下載snmp_e ...
  • 磁碟: 設備類型: 塊設備:block,磁碟 字元設備:char,鍵盤 brw-rw . 1 root disk 8, 0 Nov 3 09:42 sda 主設備號 次設備號查看硬碟類型: cat /sys/block/sda/queue/rotational0 --表示固態硬碟1 --表示機械硬碟 ...
  • [20191101]通過zsh計算sql語句的sql_id.txt1.簡單介紹以及測試使用zsh遇到的問題:--//前段時間寫的,鏈接http://blog.itpub.net/267265/viewspace-2659623/=>[20191011]通過bash計算sql語句的sql_id.txt ...
  • 前幾天,看到一個群友用WITH ROLLUP,由於沒用過,閑來無事測試一下。 一、概念: WITH CUBE:生成的結果集顯示了所選列中值的所有組合的聚合。 WITH ROLLUP:生成的結果集顯示了所選列中值的某一層次結構的聚合。 GROUPING:當行由 WITH CUBE或WITH ROLLU ...
  • 從這篇筆記開始,記錄一下表單生成器(Form Builder)相關的一些東西,網上關於他的介紹有很多,這裡就不解釋了。 開篇說一下如何存儲Form Builder生成的數據。🙂🙂🙂因為不同的表單有多少個表單項(也就是資料庫中的業務欄位)是不一樣的,也就是說傳統資料庫中的列是不固定的,那麼該如何 ...
  • 一.MySQL5.6與MySQL5.7安裝的區別 1、cmake的時候加入了boost 下載boost.org 2、初始化時 cd /application/mysql/bin/mysql 使用mysqld initialize 替代mysql_install_db,其它參數沒有變化: user= ...
  • 全局變數和局部變數 在伺服器啟動時,會將每個全局變數初始化為其預設值(可以通過命令行或選項文件中指定的選項更改這些預設值)。然後伺服器還為每個連接的客戶端維護一組會話變數,客戶端的會話變數在連接時使用相應全局變數的當前值初始化。 舉一個例子,在伺服器啟動時會初始化一個名為default_storag ...
  • MongoDB 是一個基於分散式文件存儲的資料庫。由 C++ 語言編寫,一般生產上建議以共用分片的形式來部署。 但是MongoDB官方也提供了其它語言的客戶端操作API。如下圖所示: 提供了C、C++、C#、.net、GO、java、Node.js、PHP、python、scala等各種語言的版本, ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...