程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL中的Explain命令查看執行效果

MySQL中的Explain命令查看執行效果

編輯:關於MYSQL數據庫

MySQL的Explain命令用於查看執行效果。雖然這個命令只能搭配select類型語句使用,如果你想查看update,delete類型語句中的索引效果,也不是太難的事情,只要保持條件不變,把類型轉換成select就行了。

explain的語法如下:

explain [extended] select ... from ... where ...

如果使用了extended,那麼在執行完explain語句後,可以使用show warnings語句查詢相應的優化信息。

mk-visual-explain工具擴展了explain,它提供了一種更直觀的樹形表現形式,使用方法很簡單:
mk-visual-explain <file_containing_explain_output>
mk-visual-explain -c <file_containing_query>
mysql -e "explain select * from MySQL.user" | mk-visual-explain

也可以在MySQL命令行裡通過設置pager的方式來執行:

MySQL> pager mk-visual-explain
MySQL> explain [extended] select ... from ... where ...

進入正題,為了讓例子更具體化,我們先來建一個表,插入一點測試數據:

CREATE TABLE IF NOT EXISTS `article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`author_id` int(10) unsigned NOT NULL,
`category_id` int(10) unsigned NOT NULL,
`vIEws` int(10) unsigned NOT NULL,
`comments` int(10) unsigned NOT NULL,
`title` varbinary(255) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
);

INSERT INTO `article`
(`author_id`, `category_id`, `vIEws`, `comments`, `title`, `content`) VALUES
(1, 1, 1, 1, '1', '1'), (2, 2, 2, 2, '2', '2');

CREATE TABLE IF NOT EXISTS `article` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`author_id` int(10) unsigned NOT NULL,
`category_id` int(10) unsigned NOT NULL,
`vIEws` int(10) unsigned NOT NULL,
`comments` int(10) unsigned NOT NULL,
`title` varbinary(255) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
);

INSERT INTO `article`
(`author_id`, `category_id`, `vIEws`, `comments`, `title`, `content`) VALUES
(1, 1, 1, 1, '1', '1'),(2, 2, 2, 2, '2', '2');

缺省只建了一個主鍵,沒有建其他的索引。測試時,如果你時間充裕,應該盡可能插入多一點的測試數據,怎麼說也應該保證幾千條。如果數據量過少,可能會影響MySQL在索引選擇上的判斷。如此一來,一旦產品上線,數據量增加。索引往往不會按照你的預想工作。

下面讓我們設置一個任務:查詢category_id為1且comments大於1的情況下,vIEws最多的article_id。

問題很簡單,SQL也很簡單:

SELECT author_id
FROM `article`
WHERE category_id = 1 AND comments > 1
ORDER BY vIEws DESC
LIMIT 1

SELECT author_id
FROM `article`
WHERE category_id = 1 AND comments > 1
ORDER BY vIEws DESC
LIMIT 1

下面讓我們用explain命令查看索引效果:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved