在使用MySQL執(zhí)行語句時(shí),有時(shí)候會(huì)遇到執(zhí)行語句時(shí)間太長(zhǎng),導(dǎo)致頁(yè)面長(zhǎng)時(shí)間無響應(yīng)的情況。這種情況很可能是因?yàn)镸ySQL執(zhí)行語句的超時(shí)時(shí)間過長(zhǎng),導(dǎo)致程序一直等待結(jié)果返回造成的。
MySQL執(zhí)行語句的超時(shí)時(shí)間可以通過設(shè)置wait_timeout參數(shù)來控制。wait_timeout參數(shù)的默認(rèn)值是28800秒(8小時(shí)),意味著如果MySQL執(zhí)行語句的結(jié)果在8小時(shí)內(nèi)還沒有返回,MySQL將關(guān)閉該連接。但是,在實(shí)際開發(fā)中,我們可能需要將這個(gè)值調(diào)小一些,以避免程序因?yàn)榈却龍?zhí)行結(jié)果而長(zhǎng)時(shí)間無響應(yīng)。
-- 修改wait_timeout參數(shù)的值為600秒(10分鐘) SET session wait_timeout=600;
在上面的示例中,我們將wait_timeout參數(shù)的值修改為了600秒(10分鐘)。這意味著如果MySQL執(zhí)行語句的結(jié)果在10分鐘內(nèi)還沒有返回,MySQL將關(guān)閉該連接,從而避免程序因?yàn)榈却龍?zhí)行結(jié)果而長(zhǎng)時(shí)間無響應(yīng)。
除了wait_timeout參數(shù)外,還有一個(gè)important flag參數(shù)可以設(shè)置,該參數(shù)可以控制查詢的優(yōu)先級(jí),從而保證在多個(gè)查詢同時(shí)執(zhí)行時(shí),重要的查詢先被執(zhí)行。
-- 設(shè)置important flag參數(shù) SELECT /*! 40001 SQL_NO_CACHE */ * FROM table_name WHERE id = 1;
在上面的示例中,我們?cè)诓樵冋Z句前面添加了一個(gè)important flag參數(shù),該參數(shù)的值是40001。這個(gè)參數(shù)告訴MySQL該查詢是重要的,應(yīng)該先被執(zhí)行。如果在同一時(shí)間有多個(gè)查詢需要執(zhí)行,那么優(yōu)先級(jí)最高的查詢會(huì)被優(yōu)先執(zhí)行。