mysql開啟慢查詢?nèi)罩?如何開啟MySQL慢查詢?nèi)罩荆?/h1>
如何開啟MySQL慢查詢?nèi)罩??shell>mysql -u root -p #輸入密碼 mysql>show variables like "%slow%" #檢查下面幾條參數(shù) slow_qu
如何開啟MySQL慢查詢?nèi)罩荆?/h2>
shell>mysql -u root -p #輸入密碼 mysql>show variables like "%slow%" #檢查下面幾條參數(shù) slow_query_log #這個(gè)是表示的slow log有沒開 slow_query_log_file #這個(gè)是slow log的地址 #然后直接vim 那個(gè)文件就可以了
為什么MySQL在數(shù)據(jù)庫較大的時(shí)候分頁查詢很慢,如何優(yōu)化?
使用合理的分頁方式以提高分頁的效率
正如樓主所說,分頁查詢?cè)谖覀兊膶?shí)際應(yīng)用中非常普遍,也是最容易出問題的查詢場景。比如對(duì)于下面簡單的語句,一般想到的辦法是在name,age,register_time字段上創(chuàng)建復(fù)合索引。這樣條件排序都能有效的利用到索引,性能迅速提升。
如上例子,當(dāng) LIMIT 子句變成 “LIMIT 100000, 50” 時(shí),此時(shí)我們會(huì)發(fā)現(xiàn),只取50條語句為何會(huì)變慢?
原因很簡單,MySQL并不知道第 100000條記錄從什么地方開始,即使有索引也需要從頭計(jì)算一次,因此會(huì)感覺非常的慢。
通常,我們?cè)谧龇猪摬樵儠r(shí),是可以獲取上一頁中的某個(gè)數(shù)據(jù)標(biāo)志來縮小查詢范圍的,比如時(shí)間,可以將上一頁的最大值時(shí)間作為查詢條件的一部分,SQL可以優(yōu)化為這樣:
若對(duì)你有所幫助,歡迎點(diǎn)贊、關(guān)注支持哦。
mysql優(yōu)化教程?
1、對(duì)SQL語句、索引、表結(jié)構(gòu)等進(jìn)行優(yōu)化。
2、開啟查詢緩存,Query Cache緩存了SELECT查詢及其結(jié)果數(shù)據(jù)集,當(dāng)執(zhí)行一個(gè)同樣的SELECT查詢時(shí),MySQL會(huì)從內(nèi)存中直接取出結(jié)果,加快了查詢執(zhí)行速度、減小了數(shù)據(jù)庫的壓力。執(zhí)行SHOW VARIABLES LIKE "have_query_cache"可以查看MySQL查詢緩存是否打開,開啟查詢緩存只需配置my.cnf文件即可,具體如下:
query_cache_type = 1
query_cache_size = 128M
query_cache_limit = 1M
保存好后重啟MySQL。
3、選用InnoDB存儲(chǔ)引擎,MySQL常用存儲(chǔ)引擎是MyISAM和InnoDB,二者區(qū)別如下:
MyISAM
查詢速度快;
支持表級(jí)鎖,在上鎖期間表上不能進(jìn)行其他操作;
支持全文檢索;
支持?jǐn)?shù)據(jù)壓縮、自我復(fù)制、查詢緩存、數(shù)據(jù)加密;
不支持外鍵;
不支持事務(wù),所以也就沒有COMMIT和ROLLBACK操作;
不支持集群數(shù)據(jù)庫。
InnoDB
支持行級(jí)鎖;
支持外鍵,對(duì)外鍵約束強(qiáng)制;
支持事務(wù),可執(zhí)行COMMIT和ROLLBACK操作;
支持?jǐn)?shù)據(jù)壓縮、自我復(fù)制、查詢緩存、數(shù)據(jù)加密;
可用在集群環(huán)境,但并不完全支持。InnoDB表可以轉(zhuǎn)換為NDB存儲(chǔ)引擎,這樣就能用在集群環(huán)境。