首頁 資料庫 mysql教程 Mysql資料庫優化的方法總結(必看)

Mysql資料庫優化的方法總結(必看)

Aug 18, 2018 pm 05:52 PM
mysql 最佳化

這篇文章帶給大家的內容是關於Mysql資料庫優化的方法總結,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

學無止境,資料庫最佳化分為方方面面,在這裡,我進行了比較全的總結,分享給正在工作或學習的同儕。

資料庫的最佳化分為以下七大面向:

1 、表格的設計要符合三範式適當的反三範式也可以);

2、增加適當的索引,索引對查詢速度影響很大,必須新增索引(主鍵索引,唯一索引,普通索引,全文索引);

#3、新增適當儲存過程,觸發器,事務等;

4 、讀寫分離(主從資料庫);

5、對sql語句的一些最佳化,(查詢執行速度比較慢的sql語句);

##6、分錶分區(

分錶:把一張大表分成多張表。分區:把一張表裡面的分配到不同的區域存儲);

7、對mysql伺服器硬體的升級操作。

接下來我將具體講解優化的方式。

一、三範式

第一個範式:

原子性:表裡面的欄位不能再分割,只要是關聯式資料庫,就天然的自動滿足第一範式

關係型資料庫

(有行和列的概念):mysql 、sql server、oracle、db2、infomix、sybase、postgresql,在設計時,先有函式庫->表->欄位->具體記錄(內容):儲存資料時,要設計欄位。

非關聯式資料庫(泛指nosql資料庫):memcache、redis、momgodb等。

第二範式:

一個表格中沒有完全相同的記錄,透過一個主鍵即能解決

第三範式:

表中無法儲存冗餘資料

反三範式設計:

相簿表1生活100#2
ID 相簿名稱 #相簿瀏覽量
照片
##工作照 100
照片表#ID##照片名稱相簿ID瀏覽量#1我的小狗1492我的小貓1#513我的同事2100

如果要算一個相簿的瀏覽量,我們可以在相簿表中新增相簿瀏覽量字段,瀏覽照片的時候同時更新相簿瀏覽量。

二、開啟慢查詢

#Mysql慢查詢預設是關閉的,預設記錄超過10秒的sql語句。

1.檢視慢查詢記錄時間:

#
show variables like ‘long_query_time’;
登入後複製

2.修改慢式查詢時間:

set long_query_time=2;
登入後複製

3.透過如下的一個函數來進行測試:

benchmark(count,expr)   函数可以测试执行count次expr操作需要的时间
登入後複製

#三、建立索引

1、主鍵索引的特點:

(1)一個表格中最多只有一個主鍵索引

(2)一個主鍵索引可以指向多個欄位

( 3)主鍵索引的列,不能有重複的值,也不能有null

(4)主鍵索引的效率高。

2、唯一索引的特點:

#(1)一個表格中可以有多個唯一索引

#(2)一個唯一索引可以指向多個列,

(3)如果在唯一索引上,沒有指定not null,則該列可以為空,同時可以有多個null,

(4)唯一索引的效率較高。

3、普通索引:

使用普通索引主要是提高查詢效率

4 、全文索引

mysql自帶的全文索引mysql5.5不支援中文,支援英文,同時要求表的儲存引擎是myisam。如果希望支援中文,有兩個方案,

(1)使用aphinx中文版coreseek (來取代全文索引)

(2)外掛程式mysqlcft。

新增索引主要的問題:

(1)較頻繁的作為查詢條件欄位應該建立索引,唯一性太差的欄位不適合單獨建立索引,即使頻繁作為查詢條件,更新非常頻繁的欄位不適合建立索引

(2)不會出現在WHERE子句中欄位不該建立索,索引是由代價的,雖然是查詢速度提高了,但是,會影響增該刪的效率。而且索引檔會佔用空間。

四、分錶、分割區

#垂直分表(內容主表附加表):

#內容主表:儲存各種資料的一些公共訊息,例如資料的名稱,新增時間等,

可以使用多個附加表,附加表儲存一些資料的獨特的資訊。

主要原因:是內容主表裡面的資料存取比較頻繁。

特點:表格結構不同

#水平分錶:

將表數據存在不同的表中

特點:表格結構相同

分割區:

就是把一個表格儲存到磁碟不同區域,仍然是一張表。

基本的概念:

#(1)Range(範圍)–這個模式允許將資料分割不同範圍。例如可以將一個表格透過年份劃分成若干個分區。

(2)List(預先定義清單)–此模式允許系統透過預先定義的清單的值來分割資料。

(3)Hash(雜湊)–這中模式允許透過對錶的一個或多個列的Hash Key進行計算,最後透過這個Hash碼不同數值對應的數據區域進行分區。例如可以建立一個對錶主鍵進行分區的表。

(4)Key(键值)-上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。

分区表的限制:

(1)只能对数据表的整型列进行分区,或者数据列可以通过分区函数转化成整型列。

(2)最大分区数目不能超过1024。

(3)如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内。

(4)按日期进行分区很非常适合,因为很多日期函数可以用。但是对于字符串来说合适的分区函数不太多。

五、并发处理的锁机制

锁机制:在执行时,只有一个用户获得锁,其他用户处于阻塞状态,需要等待解锁。

mysql 的锁有以下几种形式:

表级锁:开销小,加锁快,发生锁冲突的概率最高,并发度最低。myisam引擎属于这种类型。

行级锁:开销大,加锁慢,发生锁冲突的概率最低,并发度也最高。innodb属于这种类型。

表锁的演示:

1.对myisam表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其他进程的操作。

2.表添加读锁后,其他进程对该表只能查询操作,修改时会被阻塞。

3.当前进程,能够执行查询操作,不能执行修改操作。不能对没有锁定的表进行操作。

4.锁表的语法:

lock table 表名 read|write
登入後複製

5.也可以锁定多个表

6.对myisam表的写操作(加写锁),会阻塞其他进程对锁定表的任何操作,不能读写,

7.表加写锁后,则只有当前进程对锁定的表,可以执行任何操作。其他进程的操作会被阻塞。

 行锁的演示:

1.innodb存储引擎是通过给索引上的索引项加锁来实现的,这就意味着:只有通过索引条件检索数据,innodb才会使用行级锁,否则,innodb使用表锁。

2.开启行锁后,当前进程在针对某条记录执行操作时,其他进程不能操作和当前进程相同id的记录。

php里面有文件锁,在实际的项目中多数使用文件锁,因为表锁,会阻塞,当对一些表添加写锁后,其他进程就不能操作了。这样会阻塞整个网站,会拖慢网站的速度。

相关推荐:



以上是Mysql資料庫優化的方法總結(必看)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

phpmyadmin怎麼打開 phpmyadmin怎麼打開 Apr 10, 2025 pm 10:51 PM

可以通過以下步驟打開 phpMyAdmin:1. 登錄網站控制面板;2. 找到並點擊 phpMyAdmin 圖標;3. 輸入 MySQL 憑據;4. 點擊 "登錄"。

MySQL:世界上最受歡迎的數據庫的簡介 MySQL:世界上最受歡迎的數據庫的簡介 Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

為什麼要使用mysql?利益和優勢 為什麼要使用mysql?利益和優勢 Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

redis怎麼使用單線程 redis怎麼使用單線程 Apr 10, 2025 pm 07:12 PM

Redis 使用單線程架構,以提供高性能、簡單性和一致性。它利用 I/O 多路復用、事件循環、非阻塞 I/O 和共享內存來提高並發性,但同時存在並發性受限、單點故障和不適合寫密集型工作負載的局限性。

MySQL和SQL:開發人員的基本技能 MySQL和SQL:開發人員的基本技能 Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

MySQL的位置:數據庫和編程 MySQL的位置:數據庫和編程 Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

SQL刪除行後如何恢復數據 SQL刪除行後如何恢復數據 Apr 09, 2025 pm 12:21 PM

直接從數據庫中恢復被刪除的行通常是不可能的,除非有備份或事務回滾機制。關鍵點:事務回滾:在事務未提交前執行ROLLBACK可恢復數據。備份:定期備份數據庫可用於快速恢復數據。數據庫快照:可創建數據庫只讀副本,在數據誤刪後恢復數據。慎用DELETE語句:仔細檢查條件,避免誤刪數據。使用WHERE子句:明確指定要刪除的數據。使用測試環境:在執行DELETE操作前進行測試。

See all articles