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