加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

深入浅出Mysql索引的那些事儿

发布时间:2019-08-23 00:46:18 所属栏目:建站 来源:猿人谷
导读:副标题#e# 一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。 在数据量和访问量不大的情况下,mysql访问是

尽量避免这些不走索引的sql:

  1. SELECT name,phone FROM `user` WHERE `age`+10=30; -- 不会使用索引,因为所有索引列参与了计算 
  2.  
  3. SELECT name,phone  FROM `user` WHERE LEFT(`date`,4) <1990; -- 不会使用索引,因为使用了函数运算,原理与上面相同 
  4.  
  5. SELECT * FROM `user` WHERE `name` LIKE'后盾%' -- 走索引 
  6.  
  7. SELECT * FROM `user` WHERE `name` LIKE "%后盾%" -- 不走索引 
  8.  
  9. -- 正则表达式不使用索引,这应该很好理解,所以为什么在SQL中很难看到regexp关键字的原因 
  10.  
  11. -- 字符串与数字比较不使用索引; 
  12. CREATE TABLE `a` (`a` char(10)); 
  13. EXPLAIN SELECT * FROM `a` WHERE `a`="1" -- 走索引 
  14. EXPLAIN SELECT * FROM `a` WHERE `a`=1 -- 不走索引 
  15.  
  16. select * from dept where dname='xxx' or loc='xx' or deptno=45 --如果条件中有or,即使其中有条件带索引也不会使用。换言之,就是要求使用的所有字段,都必须建立索引, 我们建议大家尽量避免使用or 关键字 
  17.  
  18. -- 如果mysql估计使用全表扫描要比使用索引快,则不使用索引 

索引虽然好处很多,但过多的使用索引可能带来相反的问题,索引也是有缺点的:

  • 虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT,UPDATE和DELETE。因为更新表时,mysql不仅要保存数据,还要保存一下索引文件
  • 建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在要给大表上建了多种组合索引,索引文件会膨胀很宽

索引只是提高效率的一个方式,如果mysql有大数据量的表,就要花时间研究建立优秀的索引,或优化查询语句。

使用索引时,有一些技巧

  1. 索引不会包含有NULL的列

只要列中包含有NULL值,都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此符合索引就是无效的。

    2.使用短索引

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读