日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql locate索引_MYSQL索引优化

發(fā)布時間:2024/3/12 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql locate索引_MYSQL索引优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.查看sql的執(zhí)行頻率

MySQL 客戶端連接成功后,通過 show [session|global] status 命令可以提供服務(wù)器狀態(tài)信息。show [session|global] status 可以根據(jù)需要加上參數(shù)“session”或者“global”來顯示 session 級(當前連接)的計結(jié)果和 global 級(自數(shù)據(jù)庫上次啟動至今)的統(tǒng)計結(jié)果。如果不寫,默認使用參數(shù)是“session”。

2.定位效率底下的sql

可以通過以下兩種方式定位執(zhí)行效率較低的 SQL 語句。

慢查詢?nèi)罩?: 通過慢查詢?nèi)罩径ㄎ荒切﹫?zhí)行效率較低的 SQL 語句,用--log-slow-queries[=file_name]選項啟 動時,mysqld 寫一個包含所有執(zhí)行時間超過 long_query_time 秒的 SQL 語句的日志文件。具體可以查看本 書第 26 章中日志管理的相關(guān)部分。

show processlist : 慢查詢?nèi)罩驹诓樵兘Y(jié)束以后才紀錄,所以在應(yīng)用反映執(zhí)行效率出現(xiàn)問題的時候查詢慢查詢 日志并不能定位問題,可以使用show processlist命令查看當前MySQL在進行的線程,包括線程的狀態(tài)、是否 鎖表等,可以實時地查看 SQL 的執(zhí)行情況,同時對一些鎖表操作進行優(yōu)化。

3.explain分析執(zhí)行計劃

?

type 顯示的是訪問類型,是較為重要的一個指標,可取值為:

?

一般來說, 我們需要保證查詢至少達到 range 級別, 最好達到ref 。

Mysql從5.0.37版本開始增加了對 show profiles 和 show profile 語句的支持。show profiles 能夠在做SQL優(yōu)化時 幫助我們了解時間都耗費到哪里去了。

4.索引的使用

如果索引了多列,要遵守最左前綴法則。指的是查詢從索引的最左前列開始,并且不跳過索引中的列。 匹配最左前綴法則,走索引。

不要在索引列上進行運算操作, 索引將失效。

字符串不加單引號,造成索引失效。

盡量使用覆蓋索引(只訪問索引的查詢(索引列完全包含查詢列)),減少select * 。

用or分割開的條件, 如果or前的條件中的列有索引,而后面的列中沒有索引,那么涉及的索引都不會被用到。

以%開頭的Like模糊查詢,索引失效。 如果僅僅是尾部模糊匹配,索引不會失效。如果是頭部模糊匹配,索引失效。通過覆蓋索引可解決。

如果MySQL評估使用索引比全表更慢,則不使用索引。

in 走索引, not in 索引失效。

is NULL , is NOT NULL 有時索引失效。

盡量使用復(fù)合索引,而少使用單列索引 。單列索引數(shù)據(jù)庫會選擇一個最優(yōu)的索引(辨識度最高索引)來使用,并不會使用全部索引 。

5.插入數(shù)據(jù)優(yōu)化

對于 InnoDB 類型的表,有以下幾種方式可以提高導(dǎo)入的效率:

因為InnoDB類型的表是按照主鍵的順序保存的,所以將導(dǎo)入的數(shù)據(jù)按照主鍵的順序排列,可以有效的提高導(dǎo)入數(shù) 據(jù)的效率。如果InnoDB表沒有主鍵,那么系統(tǒng)會自動默認創(chuàng)建一個內(nèi)部列作為主鍵,所以如果可以給表創(chuàng)建一個 主鍵,將可以利用這點,來提高導(dǎo)入數(shù)據(jù)的效率。

在導(dǎo)入數(shù)據(jù)前執(zhí)行 SET UNIQUE_CHECKS=0,關(guān)閉唯一性校驗,在導(dǎo)入結(jié)束后執(zhí)行SET UNIQUE_CHECKS=1,恢 復(fù)唯一性校驗,可以提高導(dǎo)入的效率。

如果應(yīng)用使用自動提交的方式,建議在導(dǎo)入前執(zhí)行 SET AUTOCOMMIT=0,關(guān)閉自動提交,導(dǎo)入結(jié)束后再執(zhí)行 SET AUTOCOMMIT=1,打開自動提交,也可以提高導(dǎo)入的效率。

insert優(yōu)化:

如果需要同時對一張表插入很多行數(shù)據(jù)時,應(yīng)該盡量使用多個值表的insert語句,這種方式將大大的縮減客戶 端與數(shù)據(jù)庫之間的連接、關(guān)閉等消耗。使得效率比分開執(zhí)行的單個insert語句快。

在事務(wù)中進行數(shù)據(jù)插入。

數(shù)據(jù)有序插入。

6.order by語句優(yōu)化:

兩種排序方式

1). 第一種是通過對返回數(shù)據(jù)進行排序,也就是通常說的 filesort 排序,所有不是通過索引直接返回排序結(jié)果的排序 都叫 FileSort 排序。

2). 第二種通過有序索引順序掃描直接返回有序數(shù)據(jù),這種情況即為 using index,不需要額外排序,操作效率高。

了解了MySQL的排序方式,優(yōu)化目標就清晰了:盡量減少額外的排序,通過索引直接返回有序數(shù)據(jù)。where 條件 和Order by 使用相同的索引,并且Order By 的順序和索引順序相同, 并且Order by 的字段都是升序,或者都是 降序。否則肯定需要額外的操作,這樣就會出現(xiàn)FileSort。

如果查詢包含 group by 但是用戶想要避免排序結(jié)果的消耗, 則可以執(zhí)行order by null 禁止排序。

7.優(yōu)化嵌套查詢

Mysql4.1版本之后,開始支持SQL的子查詢。這個技術(shù)可以使用SELECT語句來創(chuàng)建一個單列的查詢結(jié)果,然后把 這個結(jié)果作為過濾條件用在另一個查詢中。使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的SQL 操作,同時也可以避免事務(wù)或者表鎖死,并且寫起來也很容易。但是,有些情況下,子查詢是可以被更高效的連接 (JOIN)替代。連接(Join)查詢之所以更有效率一些 ,是因為MySQL不需要在內(nèi)存中創(chuàng)建臨時表來完成這個邏輯上需要兩個步驟的 查詢工作。優(yōu)化OR條件

對于包含OR的查詢子句,如果要利用索引,則OR之間的每個條件列都必須用到索引 , 而且不能使用到復(fù)合索 引; 如果沒有索引,則應(yīng)該考慮增加索引。UNION 語句的 ref 值為 const,OR 語句的 type 值為 null,const 表示是常量值引用,非常快 這兩項的差距就說明了 UNION 要優(yōu)于 OR 。

9.優(yōu)化分頁查詢

一般分頁查詢時,通過創(chuàng)建覆蓋索引能夠比較好地提高性能。在索引上完成排序分頁操作,最后根據(jù)主鍵關(guān)聯(lián)回原表查詢所需要的其他列內(nèi)容。也可以對于主鍵自增的表,可以把Limit 查詢轉(zhuǎn)換成某個位置的查詢 。

總結(jié)

以上是生活随笔為你收集整理的mysql locate索引_MYSQL索引优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。