簡體   English   中英

Mysql-使用臨時 使用文件排序

[英]Mysql - Using temporary; Using filesort

我有兩個這樣的桌子

CREATE TABLE `vendors` (
  vid int(10) unsigned NOT NULL AUTO_INCREMENT,
  updated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (vid),
  key(updated)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `products` (
  vid int(10) unsigned NOT NULL default 0,
  pid int unsigned default 0,
  flag int(11) unsigned DEFAULT '0',
  PRIMARY KEY (vid),
  KEY (pid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

這是一個簡單的查詢

> explain select vendors.vid, pid from products, vendors where pid=1 and vendors.vid=products.vid order by updated;
+------+-------------+----------+--------+---------------+---------+---------+---------------------+------+----------------------------------------------+
| id   | select_type | table    | type   | possible_keys | key     | key_len | ref                 | rows | Extra                                        |
+------+-------------+----------+--------+---------------+---------+---------+---------------------+------+----------------------------------------------+
|    1 | SIMPLE      | products | ref    | PRIMARY,pid   | pid     | 5       | const               |    1 | Using index; Using temporary; Using filesort |
|    1 | SIMPLE      | vendors  | eq_ref | PRIMARY       | PRIMARY | 4       | social.products.vid |    1 |                                              |
+------+-------------+----------+--------+---------------+---------+---------+---------------------+------+----------------------------------------------+

我想知道為什么mysql需要使用臨時表和文件排序進行這樣的簡單查詢。 如您所見,ORDER BY字段具有索引。

mysql小提琴在這里: http ://sqlfiddle.com/#!9/ 3d9be/30

在這種情況下,這將是最佳查詢,而不必總是去索引以獲得最快的結果。 當記錄計數增加時,優化器可以選擇使用索引。 您可以嘗試插入10,000個虛擬記錄,看看是否是這種情況。

如果在這里翻轉條件,您會發現它將使用索引,因為稍后在查詢中提供了連接條件所在的表。 進行連接后,我們需要查看表產品中的記錄,因此從本質上講,我已經使工作更加艱苦,因此使用了索引。 它仍然會同時運行。 您可以嘗試使兩個查詢相互競爭,以查看會發生什么。 這里是:

EXPLAIN
SELECT vendors.vid, products.pid 
FROM vendors 
INNER JOIN products ON vendors.vid = products.vid
WHERE pid = 1
ORDER BY vendors.updated DESC

你可以在這里找到一個詳細的解釋: 固定使用其中; 使用臨時; 使用文件排序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM