2015-10-29 87 views
1

我有一個查詢。查詢不使用索引

SELECT id_id FROM videos_member ORDER BY date_id DESC LIMIT 0,30

下面是表

CREATE TABLE IF NOT EXISTS `videos` (
    `id_id` int(11) NOT NULL AUTO_INCREMENT, 
    `user_id` int(11) NOT NULL, 
    `date_id` int(11) NOT NULL, 
    PRIMARY KEY (`id_id`), 
    KEY `date_id` (`date_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ; 

我不斷收到這個

id select_type table type possible_keys key key_len ref rows Extra 
1 SIMPLE  videos ALL NULL   NULL NULL NULL 342 Using filesort 

爲什麼不使用索引?

+0

你爲什麼認爲它應該使用索引?您正在按照date_id索引的相反方向進行排序。另外,您正在訪問未存儲在該索引中的值。 – JRD

+0

@JRD我不知道關於MySQL的東西,但我真的希望索引沒有方向。 –

+0

想一想,這是一個無序的索引。現在,想一下無序的b-tree索引。那有意義嗎? – JRD

回答

1

該表包含(或至少MySQL認爲它包含)342行。這很小,很可能適合於一個物理存儲塊,這意味着它可以在單個讀取操作中讀取。使用索引至少需要兩次讀取操作。因此,MySQL可能在這裏很聰明,並意識到一次讀取整個表比讀取索引然後使用它訪問表更有效率。
換句話說,如果您在表格中插入更多行,計劃可能會更改爲使用索引。

+0

我沒有undrstnd任何o_O –

+0

太棒了!我不斷添加行。當我終於到達第900排時,它跳過來開始使用索引。 – dbye