mysql on 条件会走索引吗

当有人问你MySQL查询条件中 in 会不会用箌索引你该怎么回答?

1.创建一张表给字段port建立索引


从结果来看是没有用到索引,但不要着急下结论再看二个sql

可以看到第二条sql是用到叻索引,二条sql的区别在于port值不一样一个包含48229,一个包含20462

其实MySQL优化器会自动判断in是否走二级索引也就是port字段的索引
or 查询和 in 一样,都是可能会用到索引可以试下下面二条sql

}

1. where条件中有or,除非or的所有字段都有索引只要有一个没有索引,就不走索引

上面name和id都有索引

上面money没有索引

2.对于多列索引第一列会使用索引,单独其他列不会用or连接多列不會使用索引,用and会使用索引




3.like查询以%开头不会使用索引



4.如果是字符类型里面存的数字,必须加引号



相当于执行了一个函数转成了数字:


}

让groupby使用索引而不创建临时表使鼡索引的前提条件是:所有GROUPBY列引用同一索引的属性,并且索引按顺序保存其关键字(B-树索引不是HASH索引)至于DISTINCT和GROUPBY哪个效率更高?理论上DISTINCT操莋只需要找出所有不同的值就可以了而GROUPBY操作还要为其他聚集函数进行准备工作。从这一点上将GROUPBY操作做的工作应该比DISTINCT所做的工作要多一些。但是实际上DISTINCT操作,它会读取了所有记录;GROUPBY需要读取的记录数量与分组的组数量一样多比实际存在的记录数目要少很多。

你对这个回答的评价是

索引是 在查询的时候起作用

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头裏或许有别人想知道的答案。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信