我正在使用一个相当大的数据库(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情况。
感谢任何帮助,谢谢!
答案 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,主键总是被索引。