除复合索引外,哪些情况下不适合用索引

对于索引,有时候会方便你的一些操作,但有时候就会成为负累,增加你数据库的压力,那么,应该怎样避免这些问题呢?

 1. 建立索引的目的就是帮助查询,如果查寻用不到则索引就没有必要建立。

  2. 如果表是经常需要更新的也不适合做索引。频繁更新会导致索引也会频繁更新,降低写的效率。

  3. 唯一性差的字段不适合创建索引,因为无法准确的找到想要的数据,所以查完索引后依然还需要过一遍数据,这样反而增加了查询量。

  4. 当给一个字段创建了索引的话,而这个字段要进行like模糊查询的话,那么这个值左边不可以有%,因为索引查询是要从左到右的,你如果给它加上%后,左边的值不是确定的话,它会找不到这个索引。所以在使用like模糊查询的时候,值得左边不可以有%

  5. order by 使用单一索引时不被使用,与where字句中有复合索引时被使用,如果where字句中还有其他单一索引的字段,复合索引也将不被使用。如果存在多个order by组合,将会导致放弃使用索引。

  6. where 语句里面如果带有or条件, myisam表能用到索引,innodb不行。or 当前后2个字段都有索引时才可以索引出来 否则不可以,但是根据mysql版本的不同,有的版本可以用到,有的版本用不到,但是如果涉及到sql语句优化的情况下,尽量不要使用or语句来查询。

  7. 常情况下, UNION替换WHERE子句中的OR将会起到较好的效果。对索引列使用OR将造成全表扫描。

  8. 如果数据表过大(5w以上)则有些字段(字符型长度超过(40))不适合作为索引。查询大量数据时,索引有效,但是慢。

  9. 查询结果量大的时候不使用索引的原因:因为索引时会先过一遍索引在过一遍数据。

  10. in/not in使用不到索引,因为in查询时会进行多次全表查询;

  11. 比较符中,><有时可以用到,有时候用不到,<>用不到;

继续加油吧

你可能感兴趣的:(php高级篇)