使用非索引与复合索引

时间:2017-12-14 07:02:24

标签: mysql indexing

我有问题是否有3列(名字,姓氏,地址)的表格为字符串/ varchar(255)

我的复合my_idx有2列

db.createCollection( "logItems_temp", { capped: true, size: 100000 } )
var cur = db.logItems.find()
while (cur.hasNext()) {
  logItem = cur.next(); 
  if(logItem.name == null){
      logItem.name = selvah;
  }
  db.logItems_temp.insert(logItem);
}
db.logItems.drop()
db.logItems_temp.renameCollection("logItems")

如果我使用sql,它会使用我定义的索引吗?

CREATE INDEX my_idx ON my_table (firstname,lastname)

或者我应该使用索引列作为第一个最左边的条件

select * from my_table where address="zzz" and firstname="xxxx" and lastname="yyyy"

谢谢

1 个答案:

答案 0 :(得分:1)

首先:如果您在查询前添加关键字" EXPLAIN"它将打印出它可能使用的所有索引以及MySQL选择的索引。 根据我的理解,是的,它将使用索引。查询中字段的顺序无关紧要。

重要的是索引中的顺序,但前提是您未在查询中提供所有字段(或将函数应用于值或使用类似的运算符作为字符串的其余部分)。例如,如果您仅查询lastname,则无法使用索引。如果您只查询firstname,则将使用索引。如果您查询了firstnameaddress,则会使用索引,依此类推......