做網(wǎng)站需要的大圖電商網(wǎng)站策劃
一、SQL性能分析
1.SQL執(zhí)行頻率
-- session 是查看當(dāng)前會(huì)話 ;
-- global 是查詢?nèi)謹(jǐn)?shù)據(jù) ;
SHOW GLOBAL STATUS LIKE 'Com_______';

通過上述指令,我們可以查看到當(dāng)前數(shù)據(jù)庫到底是以查詢?yōu)橹?#xff0c;還是以增刪改為主,從而為數(shù)據(jù)庫優(yōu)化提供參考依據(jù)。 如果是以增刪改為主,我們可以考慮不對(duì)其進(jìn)行索引的優(yōu)化。 如果是以查詢?yōu)橹?#xff0c;那么就要考慮對(duì)數(shù)據(jù)庫的索引進(jìn)行優(yōu)化了。
那么通過查詢SQL的執(zhí)行頻次,我們就能夠知道當(dāng)前數(shù)據(jù)庫到底是增刪改為主,還是查詢?yōu)橹鳌?那假如說是以查詢?yōu)橹?#xff0c;我們又該如何定位針對(duì)于那些查詢語句進(jìn)行優(yōu)化呢? 次數(shù)我們可以借助于慢查詢?nèi)罩尽?
2.慢查詢?nèi)罩?/strong>
SHOW VARIABLES LIKE 'slow_query_log';
我的之前配置過,所以顯示的是ON(off為關(guān),on為開):
如果要開啟慢查詢?nèi)罩?#xff0c;需要在?MySQL?的配置文件(C:\ProgramData\MySQL\MySQL Server 8.0)中配置如下信息:
# 開啟MySQL慢日志查詢開關(guān)
slow_query_log=1
# 設(shè)置慢日志的時(shí)間為2秒,SQL語句執(zhí)行時(shí)間超過2秒,就會(huì)視為慢查詢,記錄慢查詢?nèi)罩?long_query_time=2
?
小知識(shí):
my.ini和my.cnf的區(qū)別
MySQL的配置文件在windows系統(tǒng)為 my.ini
而在linux或者M(jìn)acOs是 my.cnflinux或者M(jìn)acOs配置文件所在位置
安裝MySQL方式不同配置文件所在位置也不同,如果是安裝版一般默認(rèn)在
/usr/local/mysql-[版本號(hào)]/
而免安裝版一般都都在 MySQL安裝目錄的根路徑下,如果找不到MySQL的安裝目錄,那么Linux和MacOS是可以通過命令搜索的,一般會(huì)放在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找。
?Windows的配置文件所在位置
無論安裝版和免安裝版,最好的辦法是通過環(huán)境變量的方式查找,方式有了,我就不在這里贅述了。
?
?慢查詢?nèi)罩?#xff1a;
測試【linux版本】:
配置完畢之后,通過以下指令重新啟動(dòng)MySQL服務(wù)器進(jìn)行測試,查看慢日志文件中記錄的信息
/var/lib/mysql/localhost-slow.log?。
systemctl restart mysqld
然后,再次查看開關(guān)情況,慢查詢?nèi)罩揪鸵呀?jīng)打開了。
A.?執(zhí)行如下SQL語句 :
select * from tb_user; -- 這條SQL執(zhí)行效率比較高, 執(zhí)行耗時(shí) 0.00sec
select count(*) from tb_sku; -- 由于tb_sku表中, 預(yù)先存入了1000w的記錄, count一次,耗時(shí)
13.35sec
?
B.?檢查慢查詢?nèi)罩?:
最終我們發(fā)現(xiàn),在慢查詢?nèi)罩局?#xff0c;只會(huì)記錄執(zhí)行時(shí)間超多我們預(yù)設(shè)時(shí)間(?2s?)的?SQL?,執(zhí)行較快的?SQL是不會(huì)記錄的。
?
那這樣,通過慢查詢?nèi)罩?#xff0c;就可以定位出執(zhí)行效率比較低的?SQL?,從而有針對(duì)性的進(jìn)行優(yōu)化。?
3.profile詳情?
SELECT @@have_profiling ;
?可以看到,當(dāng)前MySQL是支持 profile操作的,如果開關(guān)是關(guān)閉的。
可以通過set語句在 session/global級(jí)別開啟profiling:
SET profiling = 1;
SELECT @@profiling ;
?開關(guān)已經(jīng)打開了,接下來,我們所執(zhí)行的SQL語句,都會(huì)被MySQL記錄,并記錄執(zhí)行時(shí)間消耗到哪兒去了。 我們直接執(zhí)行如下的SQL語句:
select * from tb_user;
select * from tb_user where id = 1;
select * from tb_user where name = '白起';
select count(*) from tb_user;
-- 查看每一條SQL的耗時(shí)基本情況
show profiles;
-- 查看指定query_id的SQL語句各個(gè)階段的耗時(shí)情況
show profile for query query_id;
-- 查看指定query_id的SQL語句CPU的使用情況
show profile cpu for query query_id;
show profile for query 97;
4.explain?
-- 直接在select語句之前加上關(guān)鍵字 explain / desc
EXPLAIN SELECT 字段列表 FROM 表名 WHERE 條件 ;
Explain 執(zhí)行計(jì)劃中各個(gè)字段的含義:
二、好書推薦
清華社【秋日閱讀企劃】領(lǐng)券立享優(yōu)惠
IT好書 5折疊加10元 無門檻優(yōu)惠券:https://u.jd.com/Yqsd9wj
活動(dòng)時(shí)間:9月4日-9月17日,先到先得,快快來搶
?
迫不及待的小伙伴點(diǎn)擊鏈接查看:?Spring Cloud 微服務(wù)快速上手
?本次送書 2?本? ?評(píng)論區(qū)抽2位小伙伴送書
活動(dòng)時(shí)間:截止到 2023-09-17?20:00:00抽獎(jiǎng)方式:利用程序進(jìn)行抽獎(jiǎng)。
參與方式:關(guān)注博主、點(diǎn)贊、收藏,評(píng)論區(qū)評(píng)論 "人生苦短,我用Java!"