這篇文章主要介紹MySQL中優(yōu)化的方法,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司是專業(yè)的和靜網(wǎng)站建設(shè)公司,和靜接單;提供成都做網(wǎng)站、網(wǎng)站設(shè)計,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行和靜網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
sql優(yōu)化分析
索引優(yōu)化
優(yōu)化表的數(shù)據(jù)類型
表拆分(水平、垂直)
反范式
使用中間表
mysql內(nèi)存管理優(yōu)化
log機(jī)制及優(yōu)化
調(diào)整mysql并發(fā)參數(shù)
數(shù)據(jù)庫連接池
使用緩存減少壓力
負(fù)載均衡建立集群
主主同步、主從復(fù)制
show status 例如:分析讀為主,還是寫為主
慢查詢?nèi)罩径ㄎ?log-slow-queries = xxx(指定文件名)SHOW PROCESSLIST查看當(dāng)前正在進(jìn)行的線程,包括線程狀態(tài)、是否鎖表
explain "your sql"desc "your sql"- 部分參數(shù)分析 select_type: SIMPLE 簡單表,不使用表連接或子查詢PRIMARY 主查詢,即外層的查詢UNION SUBQUER 子查詢的第一個select type: ALL 全表掃描 index 索引全掃描 range 索引范圍掃描 ref 使用非唯一索引或唯一索引的前綴掃描 eq_ref 類似ref,使用的索引是唯一索引const/system 單表中最多有一個匹配行NULL 不用訪問表或者索引,直接得到結(jié)果
select @@have_profiling 是否支持 select @@profiling 是否開啟 執(zhí)行 "your sql"show profiles show profile block io for QUERY 17
B-TREE索引:常見,大部分都支持HASH索引:只有memory引擎支持R-TREE索引:空間索引是MyISAM的一個特殊索引類型,主要用于地理空間數(shù)據(jù)類型 full-text索引:全文索引,MyISAM的一個特殊索引類型,innodb從5.6開始支持
添加索引ALTER Table `table_name` ADD PRIMARY KEY(`column`)ALTER Table `table_name` ADD UNIQUE(`column`)ALTER Table `table_name` ADD INDEX(`column`)ALTER Table `table_name` ADD FULLTEXT(`column`) 刪除ALTER Table `table_name` drop index index_name
匹配全值 匹配值范圍查詢 匹配最左前綴 僅僅對索引進(jìn)行查詢(覆蓋查詢) 匹配列前綴 (添加前綴索引) 部分精確+部分范圍
以%開關(guān)的like查詢 數(shù)據(jù)類型出現(xiàn)隱式轉(zhuǎn)換 復(fù)合索引查詢條件不包含最左部分 使用索引仍比全表掃描慢 用or分割開的條件
optimize table table_name 合并表空間碎片,對MyISAM、BDB、INNODB有效 如果提示不支持,可以用 mysql --skip-new 或者 mysql --safe-mode 來重啟,以便讓其他引擎支持
盡量避免全表掃描,對where及orderby的列建立索引 盡量避免where使用 != 或 <>盡量避免where子句用 or 連接條件 亂用%導(dǎo)致全表掃描 盡量避免where子句對字段進(jìn)行表達(dá)式操作 盡量避免where子句對字段進(jìn)行函數(shù)操作 覆蓋查詢,返回需要的字段 優(yōu)化嵌套查詢,關(guān)聯(lián)查詢優(yōu)于子查詢 組合索引或復(fù)合索引,最左索引原則 用exist代替in當(dāng)索引列有大量重復(fù)數(shù)據(jù)時,SQL查詢可能不會去利用索引
PROCEDURE ANALYSE (16,256) 排除多于16個,大于256字節(jié)的ENUM建議"your sql" PROCEDURE ANALYSE ()
垂直拆分 針對某些列常用、不常用 水平拆分 表很大 表中的數(shù)據(jù)有獨立性,能簡單分類 需要在表存放多種介質(zhì)
增加冗余列、增加派生列、重新組表和分割表
數(shù)據(jù)查詢量大 數(shù)據(jù)統(tǒng)計、分析場景
show engines; 查看myql所支持的存儲引擎 show variables like '%storage_engine'; 查看mysql默認(rèn)的存儲引擎 show create table table_name 查看具體表使用的存儲引擎
1. 提供事務(wù)、回滾、系統(tǒng)奔潰修復(fù)能力、多版本并發(fā)控制事務(wù)2. 支持自增列3. 支持外鍵4. 支持事務(wù)以及事務(wù)相關(guān)聯(lián)功能5. 支持mvcc的行級鎖
1. 不支持事務(wù)、不支持行級鎖,只支持并發(fā)插入的表鎖,主要用于高負(fù)載的select2. 支持三種不同的存儲結(jié)構(gòu):靜態(tài)、動態(tài)、壓縮
#修改相應(yīng)服務(wù)器位置的配置文件 my.cnf key_buffer_size 決定myisam索引塊緩存區(qū)的大小,直接影響表的存取效率,建議1/4可用內(nèi)存 read_buffer 讀緩存 write_buffer 寫緩存
innodb_buffer_pool_size 存儲引擎表數(shù)據(jù)和索引數(shù)據(jù)的最大緩存區(qū)大小 innodb_old_blocks_pct LRU算法 決定old sublist的比例 innodb_old_blocks_time LRU算法 數(shù)據(jù)轉(zhuǎn)移間隔時間
max_connections 最大連接數(shù),默認(rèn)151back_log 短時間內(nèi)處理大量連接,可適當(dāng)增大 table_open_cache 控制所有SQL執(zhí)行線程可打開表緩存的數(shù)量,受其他參數(shù)制約 thread_cache_size 控制緩存客戶服務(wù)線程數(shù)量,加快數(shù)據(jù)庫連接速度,根據(jù)threads_created/connections來衡量是否合適 innodb_lock_wait_timeout 控制事務(wù)等待行鎖時間,默認(rèn)50ms
數(shù)據(jù)的重要性
mysql服務(wù)及自身性能瓶頸
保證大型系統(tǒng)穩(wěn)定可靠運行
使用連接池
減少對mysql的真實連接
a. 避免相同數(shù)據(jù)重復(fù)執(zhí)行(查詢緩存)
b. 使用mysql緩存(sql緩存)
負(fù)載均衡
a. LVS 分布式
b. 讀寫分離(主主復(fù)制、主從復(fù)制保證數(shù)據(jù)一致性)
以上是“MySQL中優(yōu)化的方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)站題目:MySQL中優(yōu)化的方法
網(wǎng)站路徑:http://chinadenli.net/article8/gdoiip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、關(guān)鍵詞優(yōu)化、定制開發(fā)、App設(shè)計、網(wǎng)頁設(shè)計公司、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)