我有一个大型数据库正在用来记录所有发生的事件。这就像售票系统。现在,由于我存储了具有不同状态的数据以知道同一列中某个故障单上的操作,因此我必须在语句中使用多个“或”来了解故障单中的当前状态。Mysql索引问题与多个'或'和'和'
例如:1表示开票,2表示确认,3表示关闭事件。现在查询选择具有1,2,3所有的事件将是:对于id
场
SELECT *
FROM tbl_name
WHERE status IN (1, 2, 3)
AND event_id = 1;
我已经创建了索引,并为event_id
和status
领域的又一指标event_status
。
现在,当我在此查询上运行EXPLAIN时,它不使用event_status索引,而是使用其他现有索引,如event_status_dept,它由event_id,status和department组成。
如果我在IN i.e 'IN (1,2)'
语句中只使用两个字段,它将使用event_status
索引,否则它使用另一个索引,即event_status_dept。我不知道我的发言有什么问题。
MySQL语句只能在EXPLAIN输出中每行使用一个索引 –
只需注意:如果在'(event_id,status,department)'上有索引,'(event_id,status)'上的索引是多余的。这两者中的任何一个都可以用于您的查询(速度没有任何差异)。但是,当对表进行INSERT,UPDATE或DELETE时,MySQL必须更新两个索引。所以,你可以删除第二个无用的(在这种情况下)索引。 –