我有问题是否有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"
谢谢
答案 0 :(得分:1)
首先:如果您在查询前添加关键字" EXPLAIN"它将打印出它可能使用的所有索引以及MySQL选择的索引。 根据我的理解,是的,它将使用索引。查询中字段的顺序无关紧要。
重要的是索引中的顺序,但前提是您未在查询中提供所有字段(或将函数应用于值或使用类似的运算符作为字符串的其余部分)。例如,如果您仅查询lastname
,则无法使用索引。如果您只查询firstname
,则将使用索引。如果您查询了firstname
和address
,则会使用索引,依此类推......