婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > MySQL啟用慢查詢(xún)?nèi)罩居涗浄椒?/div>

MySQL啟用慢查詢(xún)?nèi)罩居涗浄椒?/h1>

熱門(mén)標(biāo)簽:如何選擇優(yōu)質(zhì)的外呼系統(tǒng) 地圖簡(jiǎn)圖標(biāo)注 清遠(yuǎn)申請(qǐng)400電話(huà) 南通電銷(xiāo)外呼系統(tǒng)哪家強(qiáng) 桂林云電銷(xiāo)機(jī)器人收費(fèi) 東莞外呼企業(yè)管理系統(tǒng) 沈陽(yáng)智能外呼系統(tǒng)供應(yīng)商 谷歌地圖標(biāo)注位置圖解 手機(jī)外呼系統(tǒng)違法嗎

在MySQL中,慢查詢(xún)的界定時(shí)間是由MySQL內(nèi)置參數(shù)變量long_query_time來(lái)指定的,其默認(rèn)值為10(單位:秒),我們可以通過(guò)show variables like 'long_query_time';指令來(lái)查看該參數(shù)變量的信息:
long_query_time的默認(rèn)值為10秒

不過(guò),在程序開(kāi)發(fā)過(guò)程中,我們認(rèn)為慢速查詢(xún)的界定時(shí)間并沒(méi)有10秒這么長(zhǎng),依據(jù)不同項(xiàng)目的不同需求,我們一般將慢查詢(xún)的界定時(shí)間設(shè)定為1~5秒之間。我們可以使用指令set long_query_time = 秒數(shù)來(lái)設(shè)定long_query_time變量的值。
設(shè)定long_query_time的值為1秒

修改了long_query_time參數(shù)后,我們還需要讓MySQL能夠記錄下慢查詢(xún)的日志信息。因?yàn)椋谀J(rèn)情況下,MySQL并不會(huì)記錄慢查詢(xún)的日志信息。如果要記錄慢查詢(xún)?nèi)罩荆覀冃枰悦钚蟹绞竭M(jìn)入MySQL安裝目錄in目錄(也可將該目錄添加到PATH環(huán)境變量中),使用如下命令重新啟動(dòng)MySQL:

#中括號(hào)[]內(nèi)的部分是可選的,file_name表示日志文件路徑
#在5.5及以上版本的MySQL中,使用如下命令啟動(dòng):
mysqld --show-query-log[=1] [--show-query-log-file=file_name]
#在5.0、5.1等低版本的MySQL中,使用如下命令啟動(dòng):
mysqld --log-slow-queries[=file_name]

 在上述命令中,如果沒(méi)有指定日志文件名,則日志文件名稱(chēng)默認(rèn)為主機(jī)名-slow.log;如果沒(méi)有指定文件路徑或者指定的文件路徑不是絕對(duì)路徑,則日志文件將默認(rèn)存放在MySQL配置文件my.ini中參數(shù)datadir所指定的目錄下。
此外,你也可以將上述命令行啟動(dòng)命令配置到my.ini中的[mysqld]節(jié)點(diǎn)下,這樣無(wú)需每次手動(dòng)鍵入上述命令來(lái)啟動(dòng)。

[mysqld]
  #設(shè)置慢查詢(xún)界定時(shí)間為1秒
  long_query_time=1
  #5.0、5.1等版本配置如下選項(xiàng)
  log-slow-queries="mysql_slow_query.log"
  #5.5及以上版本配置如下選項(xiàng)
  slow-query-log=On
  slow_query_log_file="mysql_slow_query.log"

注意:雖然慢查詢(xún)的名字中只包含了”查詢(xún)”,實(shí)際上并不僅僅表示SELECT查詢(xún)操作,諸如INSERT、UPDATE、DELETE、CALL等其他DML操作,只要是超過(guò)指定時(shí)間的,都可以稱(chēng)之為“慢查詢(xún)”,并且會(huì)記錄在慢查詢(xún)?nèi)罩局小?br />

這個(gè)時(shí)候,我們就需要使用EXPLAIN指令來(lái)獲取SELECT語(yǔ)句執(zhí)行的細(xì)節(jié)信息。在MySQL中數(shù)據(jù)庫(kù)中,EXPLAIN指令的用法非常簡(jiǎn)單,如下所示:

EXPLAIN SELECT語(yǔ)句

--例如:EXPLAIN SELECT * FROM admin WHERE user_id = 1;

如果是在Oracle數(shù)據(jù)庫(kù)中,我們同樣可以使用如下SQL語(yǔ)句來(lái)獲取SELECT語(yǔ)句的執(zhí)行計(jì)劃信息:

EXPLAIN PLAN FOR SELECT語(yǔ)句
--例如:EXPLAIN PLAN FOR SELECT * FROM admin WHERE user_id = 1;

在這里,我們以MySQL為例,在數(shù)據(jù)庫(kù)中執(zhí)行上述EXPLAIN指令,將會(huì)輸出如下結(jié)果(user_id是admin表的主鍵列):

為了進(jìn)一步說(shuō)明上述執(zhí)行計(jì)劃信息所表示的含義,我們?cè)俅螆?zhí)行帶格式化的EXPLAIN命令

EXPLAIN SELECT * FROM admin WHERE user_id = 1G;

(G在MySQL中表示格式化輸出結(jié)果),我們將會(huì)得到如下信息:

*************************** 1. row ***************************
      id: 1
 select_type: SIMPLE 
    table: admin
     type: const
possible_keys: PRIMARY
     key: PRIMARY
   key_len: 1
     ref: const
     rows: 1
    Extra:
1 row in set (0.00 sec)

下面,我們來(lái)詳細(xì)介紹上述輸出結(jié)果中每個(gè)字段信息所表示的含義:

id
SELECT識(shí)別符。這是SELECT的查詢(xún)序號(hào)。
select_type
SELECT類(lèi)型,可以為以下任何一種:
SIMPLE
簡(jiǎn)單SELECT(不使用UNION或子查詢(xún))。
PRIMARY
最外面的SELECT
UNION
UNION中的第二個(gè)或后面的SELECT語(yǔ)句。
DEPENDENT UNION
UNION中的第二個(gè)或后面的SELECT語(yǔ)句,取決于外面的查詢(xún)。
UNION RESULT
UNION的結(jié)果。
SUBQUERY
子查詢(xún)中的第一個(gè)SELECT。
DEPENDENT SUBQUERY
子查詢(xún)中的第一個(gè)SELECT,取決于外面的查詢(xún)。
DERIVED
導(dǎo)出表的SELECT(FROM子句的子查詢(xún))。
table
輸出的行所引用的表。
type
聯(lián)接類(lèi)型。下面給出各種聯(lián)接類(lèi)型,按照從最佳類(lèi)型到最壞類(lèi)型進(jìn)行排序:
system
表僅有一行(=系統(tǒng)表)。這是const聯(lián)接類(lèi)型的一個(gè)特例。
const
表最多有一個(gè)匹配行,它將在查詢(xún)開(kāi)始時(shí)被讀取。因?yàn)閮H有一行,在這行的列值可被優(yōu)化器剩余部分認(rèn)為是常數(shù)。const表很快,因?yàn)樗鼈冎蛔x取一次!
eq_ref
對(duì)于每個(gè)來(lái)自于前面的表的行組合,從該表中讀取一行。這可能是最好的聯(lián)接類(lèi)型,除了const類(lèi)型。它用在一個(gè)索引的所有部分被聯(lián)接使用并且索引是UNIQUE或PRIMARY KEY。
ref
對(duì)于每個(gè)來(lái)自于前面的表的行組合,所有有匹配索引值的行將從這張表中讀取。如果聯(lián)接只使用鍵的最左邊的前綴,或如果鍵不是UNIQUE或PRIMARY KEY(換句話(huà)說(shuō),如果聯(lián)接不能基于關(guān)鍵字選擇單個(gè)行的話(huà)),則使用ref。如果使用的鍵僅僅匹配少量行,該聯(lián)接類(lèi)型是不錯(cuò)的。ref可以用于使用=或=>操作符的帶索引的列。
ref_or_null
該聯(lián)接類(lèi)型如同ref,但是添加了MySQL可以專(zhuān)門(mén)搜索包含NULL值的行。在解決子查詢(xún)中經(jīng)常使用該聯(lián)接類(lèi)型的優(yōu)化。
index_merge
該聯(lián)接類(lèi)型表示使用了索引合并優(yōu)化方法。在這種情況下,key列包含了使用的索引的清單,key_len包含了使用的索引的最長(zhǎng)的關(guān)鍵元素。
unique_subquery
該類(lèi)型替換了下面形式的IN子查詢(xún)的ref:value IN (SELECT primary_key FROM single_table WHERE some_expr)。 unique_subquery是一個(gè)索引查找函數(shù),可以完全替換子查詢(xún),效率更高。
index_subquery
該聯(lián)接類(lèi)型類(lèi)似于unique_subquery。可以替換IN子查詢(xún),但只適合下列形式的子查詢(xún)中的非唯一索引:value IN (SELECT key_column FROM single_table WHERE some_expr)
range
只檢索給定范圍的行,使用一個(gè)索引來(lái)選擇行。key列顯示使用了哪個(gè)索引。key_len包含所使用索引的最長(zhǎng)關(guān)鍵元素。在該類(lèi)型中ref列為NULL。 當(dāng)使用=、>、>、>=、、=、IS NULL、=>、BETWEEN或者IN操作符,用常量比較關(guān)鍵字列時(shí),可以使用range。
index
該聯(lián)接類(lèi)型與ALL相同,除了只有索引樹(shù)被掃描。這通常比ALL快,因?yàn)樗饕募ǔ1葦?shù)據(jù)文件小。 當(dāng)查詢(xún)只使用作為單索引一部分的列時(shí),MySQL可以使用該聯(lián)接類(lèi)型。
ALL
對(duì)于每個(gè)來(lái)自于先前的表的行組合,進(jìn)行完整的表掃描。如果表是第一個(gè)沒(méi)標(biāo)記const的表,這通常不好,并且通常在它情況下很差。通常可以增加更多的索引而不要使用ALL,使得行能基于前面的表中的常數(shù)值或列值被檢索出。
possible_keys
possible_keys列指出MySQL能使用哪個(gè)索引在該表中找到行。注意,該列完全獨(dú)立于EXPLAIN輸出所示的表的次序。這意味著在possible_keys中的某些鍵實(shí)際上不能按生成的表次序使用。 如果該列是NULL,則沒(méi)有相關(guān)的索引。在這種情況下,可以通過(guò)檢查WHERE子句看是否它引用某些列或適合索引的列來(lái)提高你的查詢(xún)性能。如果是這樣,創(chuàng)造一個(gè)適當(dāng)?shù)乃饕⑶以俅斡肊XPLAIN檢查查詢(xún)。
key
key列顯示MySQL實(shí)際決定使用的鍵(索引)。如果沒(méi)有選擇索引,鍵是NULL。要想強(qiáng)制MySQL使用或忽視possible_keys列中的索引,在查詢(xún)中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。
key_len
key_len列顯示MySQL決定使用的鍵長(zhǎng)度。如果鍵是NULL,則長(zhǎng)度為NULL。注意通過(guò)key_len值我們可以確定MySQL將實(shí)際使用一個(gè)多部關(guān)鍵字的幾個(gè)部分。
ref
ref列顯示使用哪個(gè)列或常數(shù)與key一起從表中選擇行。
rows
rows列顯示MySQL認(rèn)為它執(zhí)行查詢(xún)時(shí)必須檢查的行數(shù)。
Extra
該列包含MySQL解決查詢(xún)的詳細(xì)信息。下面解釋了該列可以顯示的不同的文本字符串:
Distinct
MySQL發(fā)現(xiàn)第1個(gè)匹配行后,停止為當(dāng)前的行組合搜索更多的行。
Not exists
MySQL能夠?qū)Σ樵?xún)進(jìn)行LEFT JOIN優(yōu)化,發(fā)現(xiàn)1個(gè)匹配LEFT JOIN標(biāo)準(zhǔn)的行后,不再為前面的的行組合在該表內(nèi)檢查更多的行。 下面是一個(gè)可以這樣優(yōu)化的查詢(xún)類(lèi)型的例子:SELECT * FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;假定t2.id定義為NOT NULL。在這種情況下,MySQL使用t1.id的值掃描t1并查找t2中的行。如果MySQL在t2中發(fā)現(xiàn)一個(gè)匹配的行,它知道t2.id絕不會(huì)為NULL,并且不再掃描t2內(nèi)有相同的id值的行。換句話(huà)說(shuō),對(duì)于t1的每個(gè)行,MySQL只需要在t2中查找一次,無(wú)論t2內(nèi)實(shí)際有多少匹配的行。
range checked for each record (index map: #)
MySQL沒(méi)有發(fā)現(xiàn)好的可以使用的索引,但發(fā)現(xiàn)如果來(lái)自前面的表的列值已知,可能部分索引可以使用。對(duì)前面的表的每個(gè)行組合,MySQL檢查是否可以使用range或index_merge訪問(wèn)方法來(lái)索取行。 這并不很快,但比執(zhí)行沒(méi)有索引的聯(lián)接要快得多。
Using filesort
MySQL需要額外的一次傳遞,以找出如何按排序順序檢索行。通過(guò)根據(jù)聯(lián)接類(lèi)型瀏覽所有行并為所有匹配WHERE子句的行保存排序關(guān)鍵字和行的指針來(lái)完成排序。然后關(guān)鍵字被排序,并按排序順序檢索行。
Using index
從只使用索引樹(shù)中的信息而不需要進(jìn)一步搜索讀取實(shí)際的行來(lái)檢索表中的列信息。當(dāng)查詢(xún)只使用作為單一索引一部分的列時(shí),可以使用該策略。
Using temporary
為了解決查詢(xún),MySQL需要?jiǎng)?chuàng)建一個(gè)臨時(shí)表來(lái)容納結(jié)果。典型情況如查詢(xún)包含可以按不同情況列出列的GROUP BY和ORDER BY子句時(shí)。
Using where
WHERE子句用于限制哪一個(gè)行匹配下一個(gè)表或發(fā)送到客戶(hù)。除非你專(zhuān)門(mén)從表中索取或檢查所有行,如果Extra值不為Using where并且表聯(lián)接類(lèi)型為ALL或index,查詢(xún)可能會(huì)有一些錯(cuò)誤。 如果想要使查詢(xún)盡可能快,應(yīng)找出Using filesort 和Using temporary的Extra值。
Using sort_union(...), Using union(...), Using intersect(...)
這些函數(shù)說(shuō)明如何為index_merge聯(lián)接類(lèi)型合并索引掃描。
Using index for group-by
類(lèi)似于訪問(wèn)表的Using index方式,Using index for group-by表示MySQL發(fā)現(xiàn)了一個(gè)索引,可以用來(lái)查詢(xún)GROUP BY或DISTINCT查詢(xún)的所有列,而不要額外搜索硬盤(pán)訪問(wèn)實(shí)際的表。并且,按最有效的方式使用索引,以便對(duì)于每個(gè)組,只讀取少量索引條目。

您可能感興趣的文章:
  • mysql 開(kāi)啟慢查詢(xún) 如何打開(kāi)mysql的慢查詢(xún)?nèi)罩居涗?/li>
  • MySQL日志設(shè)置及查看方法
  • MySQL日志文件詳解
  • MySQL系列之十一 日志記錄

標(biāo)簽:貴州 常德 臨沂 內(nèi)蒙古 重慶 湖州 天津 成都

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL啟用慢查詢(xún)?nèi)罩居涗浄椒ā罚疚年P(guān)鍵詞  MySQL,啟用,慢,查詢(xún),日志,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL啟用慢查詢(xún)?nèi)罩居涗浄椒ā废嚓P(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于MySQL啟用慢查詢(xún)?nèi)罩居涗浄椒ǖ南嚓P(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 井陉县| 郯城县| 泽普县| 从化市| 潼关县| 黄骅市| 酒泉市| 富民县| 邳州市| 苏尼特右旗| 古丈县| 临湘市| 阿拉善盟| 天等县| 镇坪县| 玉田县| 黄大仙区| 南阳市| 鹰潭市| 宜阳县| 乐山市| 九寨沟县| 堆龙德庆县| 略阳县| 普定县| 鱼台县| 江陵县| 金寨县| 伊春市| 白山市| 洛浦县| 眉山市| 恭城| 屯门区| 额敏县| 鄂托克前旗| 石台县| 呼和浩特市| 邢台县| 青川县| 肇源县|