我有一张叫T的桌子。 它有4个属性:x,y,z和w。
我在表格中加载了数据。 然后,在x上创建索引,在y上创建另一个索引。
现在,当我提交此查询时:
select count(*) from T where x <= 10 and y <=100;
我假设将使用索引x和索引y。
但是,这不会发生!
当我在select语句之前使用命令EXPLAIN时,它会将索引x和y显示为“possible_keys
”,而在“key
”列下则为NULL。
这意味着没有使用索引。
现在,如果我提交此查询:
select count(*) from T where x<=50;
然后MySQL使用索引x,如EXPLAIN命令所示。
那么,条件中的AND是否阻止使用索引或者我在这里做错了什么?
问候!
答案 0 :(得分:1)
您需要将x和y编入索引,更多信息请点击此处: http://dev.mysql.com/doc/refman/5.5/en/multiple-column-indexes.html
您只需运行此查询:
ALTER TABLE `your_table_name_here`
ADD INDEX `IDX_COMB_XY` (`x` ASC, `y` ASC) ;
现在运行Explain,您将看到将使用IDX_COMB_XY。
答案 1 :(得分:1)
MySQL在查询中每个表只能使用1个索引。当有多个索引可供选择时,MySQL将根据基数,内存要求,记录数等,采取有根据的猜测,哪一个最有益。
@ Mojtaba的答案解释了如何创建MySQL将在您的场景中使用的多列索引。