MySQL主键类型变为" index"内连接后

时间:2014-07-27 21:07:14

标签: mysql sql join indexing where

我正在使用一个相当大的数据库(500多万条目),并且正在尝试优化搜索引擎。

我有3张桌子:

(id,data)

item_terms (id,term)

item_term_results (id,item_term_id,item_id)

item_terms.id是唯一索引,item_term_id是索引。

当尝试以下查询时,一切顺利,我得到了我想要的,作为我正在搜索的项目的ID,具有良好的表现。

SELECT DISTINCT item_term_results.item_id FROM item_terms
    INNER JOIN item_term_results ON item_terms.id = item_term_results.item_term_id
    WHERE item_terms.term = 'Jason'

并且解释返回查询在item_terms上有一个类型“const”,在item_term_results上有一个“ref”。大。

但是,现在我想添加另一个WHERE闭包:

SELECT DISTINCT item_term_results.item_id FROM item_terms
    INNER JOIN item_term_results ON item_terms.id = item_term_results.item_term_id
    WHERE item_terms.term = 'Jason'
    OR item_terms.term = 'Bourne'

惊喜!现在查询在item_terms上有一种“索引”,即使item_term是唯一索引。

知道为什么吗?我怎么能解决这个问题?此时我无法从mysql移动到另一个数据库,并且在每种情况下我都需要有多个WHERE情况。

感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

您不需要多个where子句,如果它是相同的字段则使用IN:

SELECT DISTINCT item_term_results.item_id
  FROM item_terms
 INNER JOIN item_term_results
    ON item_terms.id = item_term_results.item_term_id
 WHERE item_terms.term in ('Jason','Bourne')

作为一个FYI,主键总是被索引。