新聞中心
此文章主要向大家描述的是MySQL SQL優(yōu)化的實(shí)際操作方案,同時(shí)還涉及一個(gè)MySQL數(shù)據(jù)庫(kù)查詢(xún)所使用index的問(wèn)題,MySQL數(shù)據(jù)庫(kù)的強(qiáng)制索引(Force Index)能實(shí)現(xiàn)哪些優(yōu)化?以下的文章都有答案。

在全椒等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶(hù)提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需搭建網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都營(yíng)銷(xiāo)網(wǎng)站建設(shè),外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè),全椒網(wǎng)站建設(shè)費(fèi)用合理。
MySQL5下大數(shù)據(jù)量查詢(xún)優(yōu)化的問(wèn)題
推薦圈子: Database圈子
更多相關(guān)推薦 一般使用MySQL SQL的時(shí)候你是不會(huì)去想到優(yōu)化。但是面對(duì)一個(gè)有SQL性能問(wèn)題的數(shù)據(jù)庫(kù)時(shí),我們應(yīng)該如何入手進(jìn)行系統(tǒng)的分析,使得能夠盡快定位問(wèn)題SQL,并且盡快解決問(wèn)題。
1.使用show status 命令了解各種MySQL SQL的執(zhí)行頻率
引用
例如在MySQL的Cline上輸入
show status like 'Com_%';
顯示的是一些:Com_xxx.
Com_xxx 表示每個(gè)xx語(yǔ)句執(zhí)行的次數(shù)。通常情況下我們比較關(guān)注如下一些操作:
引用
Com_select:執(zhí)行select操作的次數(shù)
Com_insert:執(zhí)行Insert操作的次數(shù),對(duì)于批量插入的INSERT操作,只累加一次
Com_update:執(zhí)行update操作的次數(shù)
Com_delete:執(zhí)行Delete操作的次數(shù)
上面這些參數(shù)對(duì)于所有存儲(chǔ)引擎的表操作都會(huì)進(jìn)行累加。下面有些參數(shù)只針對(duì)InnoDB存儲(chǔ)引擎的,累加的算法也有點(diǎn)不一樣。
引用
Innodb_rows_read:select查詢(xún)返回的行數(shù)
Innodb_rows_inserted:執(zhí)行INSERT操作插入的行數(shù)
Innodb_rows_updated:執(zhí)行Update操作更新的行數(shù)
Innodb_rows_deleted:執(zhí)行Delete操作刪除的行數(shù)
通過(guò)上面的一些參數(shù),我們可以了解當(dāng)前數(shù)據(jù)庫(kù)的應(yīng)用是以插入為主還是以查詢(xún)?yōu)橹?。以及各種類(lèi)型的MySQL SQL大致的執(zhí)行比例是多少。對(duì)于更新操作的計(jì)數(shù),是對(duì)執(zhí)行次數(shù)的計(jì)數(shù),不管提交還是回滾都會(huì)進(jìn)行累加。
對(duì)于事務(wù)型的應(yīng)用,通過(guò)Com_commit和Com_rollback進(jìn)行分析。如果回滾操作非常頻繁那么要思考下是不是編寫(xiě)存在問(wèn)題。
下面有幾個(gè)參數(shù)用于了解數(shù)據(jù)庫(kù)的基本情況
引用
Connections:試圖連接MySQL服務(wù)器的次數(shù)(執(zhí)行的命令是:show status like 'Con_%';)
Uptime: 服務(wù)器工作時(shí)間(執(zhí)行的命令是:show status like 'Up_%';)
Slow_queries:慢查詢(xún)的次數(shù)(執(zhí)行的命令是:show status like 'Slow_%';)
2. 定位執(zhí)行效率較低的SQL語(yǔ)句
要想定義效率較低的SQL可以按照下面兩種方式試試。
引用
1. 通過(guò)慢查詢(xún)?nèi)罩径ㄎ荒切﹫?zhí)行效率較低的SQL語(yǔ)句,用 --log-slow-queries[=file_name]選項(xiàng)啟動(dòng)時(shí),MySQLd寫(xiě)一個(gè)包含所有執(zhí)行時(shí)間超過(guò)long_query_time秒的SQL語(yǔ)句的日志文件。
2. 慢查詢(xún)?nèi)罩驹诓樵?xún)結(jié)束以后才記錄,所以在應(yīng)用反映執(zhí)行效率出現(xiàn)問(wèn)題的時(shí)候進(jìn)行查詢(xún)慢查詢(xún)?nèi)罩静⒉荒芏ㄎ粏?wèn)題,可以使show processlist 命令查看當(dāng)前MySQL在進(jìn)行的線(xiàn)程,包括線(xiàn)程的狀態(tài),是否鎖表等,可以實(shí)時(shí)地查看MySQL SQL的執(zhí)行情況,同時(shí)對(duì)一些鎖表操作進(jìn)優(yōu)化。
3. 使用EXPLAIN分析低效SQL的執(zhí)行計(jì)劃。
在查詢(xún)到效率低的SQL語(yǔ)句后,那我們可以使用explain或者DESC命令獲取Myswl如何執(zhí)行SELECT語(yǔ)句的信息,包括在Select語(yǔ)句執(zhí)行過(guò)程中表如何連接和連接的順序。
例如你想計(jì)數(shù)xxxx年公司的銷(xiāo)售額,那么需要操作sales和comapny table,并對(duì)money字段進(jìn)行sum操作??纯丛趺词褂胑xplain:
引用
explain select sum(moneys) from sales a company b where a.company_id = b.id and a.year=XXXX \G;(注意加上\G是為了更好的看)
顯示如下:
- id: 1
- select_type: SIMPLE
- table: a
- type: ALL
- possible_keys: NULL
- key:NULL
- key_len: NULL
- ref: NULL
- rows:1000
- Extra: Using where
- id: 2
- select_type: SIMPLE
- table: b
- type: ref
- possible_keys: ind_company_id
- key:ind_comapany_id
- key_len: 5
- ref: sakila.a.company_id
- rows:1
- Extra: Using where;Using index
下面解釋下每個(gè)列的含義:
引用
select_type: 表示SELECT的類(lèi)型,常見(jiàn)的取值為SIMPLE(簡(jiǎn)單表,不使用表連接或者子查詢(xún))、PRIMARY(主查詢(xún),即外層的查詢(xún))、UNION、SUBQUERY
table: 輸出結(jié)果集的表
type: 表示表的連接類(lèi)型,性能由好到差的類(lèi)型類(lèi)型為
(System(表中僅有一行,即常量表),
const(單表中最多有一個(gè)匹配行),
eq_ref(對(duì)于前面的每一行,在此表中只查詢(xún)一條記錄),
ref(使用普通的索引),
ref_or_null(和ref類(lèi)似,但是條件中包含對(duì)于NULL查詢(xún)),
index_merge(索引合并優(yōu)化),
unique_subquery(in的后面是一個(gè)查詢(xún)主鍵字段的子查詢(xún)),
index_subquery(類(lèi)似unique_subquery,主要是in的后面是查詢(xún)非***索引字段的子查詢(xún)),
range(單表中的范圍查詢(xún)),
index(對(duì)于當(dāng)前的每一行,都通過(guò)查詢(xún)索引來(lái)得到數(shù)據(jù)),
all(對(duì)于當(dāng)前的每一行,都通過(guò)全表掃描來(lái)得到數(shù)據(jù)))
possible_keys: 表示查詢(xún)時(shí),可能使用的索引
key:表示實(shí)際使用的索引
key_len:索引字段的長(zhǎng)度
rows:掃描行的數(shù)量
Extra:執(zhí)行情況的說(shuō)明和描述
以上的相關(guān)內(nèi)容就是對(duì)MySQL SQL優(yōu)化的筆記的介紹,望你能有所收獲。
標(biāo)題名稱(chēng):MySQLSQL優(yōu)化的實(shí)現(xiàn)并不難
本文來(lái)源:http://m.fisionsoft.com.cn/article/ccshhis.html


咨詢(xún)
建站咨詢(xún)
