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
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...