select * from a,b where a.id=b.id and a.id = 123
再explain一下看看?
因此,其实已经使用了。但是因为你的查询里对“左表a”没有条件,是全部输出的,因此不会用上a的索引,同时由于需要在b表里用id关联a表,因此就用上了b表的索引。
一但对a表增加条件,就会使用a表的索引,对索引的结果,又后继续用b表的索引来关联b表。
如果我们创建了(area, age,salary)的复合索引,那么其实相当于创建了:(area,age,salary),(area,age)、(area)三个索引,这被称为最佳左前缀
特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。
例:
select * from test where area='11'
select * from test where area='11' and age=1
select * from test where area='11' and age=1 and salary=2.0
以上有索引
select * from test where age=11
select * from test where age=1 and salary=2.0
以上无索引
-----------------------------------
如果在查询中需要匹配多个字段的条件,可以把这几个字段做个联合索引,效率要比在每个字段上加索引高多了
这肯定会的,insert和update的 *** 作会重新建立索引,你这样的条件可以建立一个包含title与contents组合索引就行了,这样会合理用到索引,也不用维护太多的索引
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)