以前数据库记录数也就万把条,所以一直没有对数据库使用索引功能,但是最近数据库记录数过百万了,所以很明显发现查询效率慢了。
首先:看一下没做索引时的情况,当我使用count(*)查询记录数:
当我直接查询整个表所有记录数时耗时极短。
但是当指定字段查询(如指定openid字体为指定值)时,查询花了近300多毫秒,这个表我总共46万数据耗时300多毫秒,又把这个表的数据增加了2倍,再查询耗时居然是900多毫秒。
这样就太慢了。于是设置openid字段索引。再执行上面的查询,查询效率提升得非常明显:
从这种情况下看,索引字段真的能够让查询效率极大地提升。
但是如果使用不等于查询,那么就没有多少用处,效率较低:
这里我得出一个总结,最好不要在查询中使用不等于来查询,但是如果实在是需要查询不等于,如果是像我这样需要查询字段总数的,可以先查询总数,再查询等于的数,那么不等于的总数就是总数-等于数。这样效率也还高。
当然此种做法只适用于查询总数。
那使用like查询时索引有没有效果呢?这里测试一下:
like查询时分三种情况:%前置、后置%、前后都有%,如果前置了%则索引将会无效。
再看一下多个字段索引查询情况:
当需要使用tmid与openid共同查询时,可以使用这两个字段创建索引。
经过测试,多字段索引中的第一个字段也可以当单字段索引,如上面openid,tmid双字段索引,那么这种情况下openid也可以有效的,但是tmid无效。
总结:索引确实在某些情况下可以极大地提升查询效率,适当使用索引会极大地提高查询效率。
声明:本人没系统学过数据库,这些只是个人实践应用的经验,如果有不对的地方,还请指出。