簡體   English   中英

如何使查詢力使用這樣的索引?

[英]How can I make a query force to use such an index?

我有這樣的查詢:

SELECT u.id, user_fname, user_lname, reputation, email, events
FROM users u
INNER JOIN cookies c ON u.id = c.user_id
WHERE c.cookie = $token

我也有這些索引:

  1. cookies(cookie, user_id) -這是一個普通索引
  2. cookies(cookie) -這是唯一索引

當我執行上面的查詢(連同EXPLAIN )時 ,它使用第二個索引: cookies(cookie) 那么如何才能強制使用第一個索引? cookies(cookie, user_id)

如果cookie唯一索引,則使用第一個索引沒有任何好處。 如果SELECT中的任何列來自cookies表,則尤其如此。

無論如何,如果cookie是唯一的,則基本上是以下處理:

  • 查找cookie值(使用索引確實非常快)。
  • 查找相應的cookie記錄(非常快,以獲取一頁)。
  • 從用戶中查找相應的記錄(非常快,使用索引)。

第一個索引可能能夠消除第二個提取。 但是,唯一索引提供的其他信息可能會平衡這一點-無論哪種方式,查詢都應該非常快。

使用FORCE INDEX(您的索引)

http://dev.mysql.com/doc/refman/5.7/zh-CN/index-hints.html

 SELECT u.id, user_fname, user_lname, reputation, email, events
 FROM users u
 INNER JOIN cookies c ON u.id = c.user_id
 FORCE INDEX (your_index) 
 WHERE c.cookie = $token

暫無
暫無

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

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