2014-08-27 70 views
2

我在我的數據庫中的以下兩個表:MySQL查詢臨時

表1:圖像

  • 列:jeid [和其他人]
  • 主鍵: jeid
  • 行數:160萬

表2:media_names

  • 列:jeid,介質類型,名字,姓氏
  • 主鍵:jeid,MEDIA_TYPE
  • 指數:名字,姓氏
  • 行數:160萬

我運行下面的查詢:

SELECT media.jeid FROM image AS media 
LEFT JOIN file_girls_names AS name ON name.jeid = media.jeid AND name.media_type = "image" 
ORDER BY name.first_name, name.last_name 
LIMIT 0, 50 

當我做了一個關於此查詢說明,額外的列告訴我:

  • 使用索引;
  • 使用臨時;
  • 使用的filesort

我不知道那是用指數「是不好的,但我敢肯定,「使用臨時」和「使用文件排序」是壞的。問題是,我不知道該如何解決這些問題。我一直在閱讀所有這些和那些,但我似乎無法找到一個明確的解決方案。任何人都可以給我一些幫助嗎?

謝謝。

回答

0

有多種方法來編寫查詢,你將不得不做一些測試,無論如何,這是我的。

SELECT `names`.`jeid` 
FROM `file_girls_names` AS `names` 
INNER JOIN `image` AS `media` ON `names`.`jeid` = `media`.`jeid` 
WHERE `names`.`media_type` = 'image' 
ORDER BY `names`.`first_name`, `names`.`last_name` 
LIMIT 0, 50 

注意::這假定你在兩個表中都有匹配的列(除非你特別想要左連接,那麼這應該是OK)。