|
对于很多程序员来说,掌握mysql索引优化设计是必备的技能技术,这也是在职场中经常会碰到的问题之一,也是各大面试官喜欢询问的问题。本文主要讨论MySQL索引的部分知识。也总结一些MySQL的常见使用技巧,以供没有DBA的团队参考。
我们需要知道什么是索引?索引其实是一种数据结构,其功能是帮助我们快速匹配查找到需要的数据行,是数据库性能优化最常用的工具之一。其作用相当于超市里的导购员、书本里的目录。
有些时候虽然数据库有索引,但是并不被优化器选择使用。我们可以通过SHOW STATUS LIKE 'Handler_read%';查看索引的使用情况。如果MySQL估计使用索引比全表扫描还慢,则不会使用索引。前导模糊查询不能命中索引。数据类型出现隐式转换的时候不会命中索引,特别是当列类型是字符串,一定要将字符常量值用引号引起来。复合索引的情况下,查询条件不包含索引列最左边部分(不满足最左原则),不会命中符合索引。
用or分割开的条件,如果or前的条件中列有索引,而后面的列中没有索引,那么涉及到的索引都不会被用到。负向条件查询不能使用索引,可以优化为in查询。建立索引的列,不允许为null。虽然IS NULL可以命中索引,但是NULL本身就不是一种好的数据库设计,应该使用NOT NULL约束以及默认值。
对于自己编写的SQL查询语句,要尽量使用EXPLAIN命令分析一下,做一个对SQL性能有追求的程序员。衡量一个程序员是否靠谱,SQL能力是一个重要的指标。作为后端程序员,深以为然。
了解MySQL的特点有助于更好的使用MySQL,MySQL和其它常见数据库最大的不同在于存在存储引擎这个概念,存储引擎负责存储和读取数据。不同的存储引擎具有不同的特点,用户可以根据业务的特点选择适合的存储引擎,甚至是开发一个新的引擎。
如果表中有一列存储较长字符串,假设名字为URL,在此列上创建的索引比较大,有个办法可以缓解:创建URL字符串的数字哈希值的索引。再新建一个字段,比如叫做URL_CRC,专门放置URL的哈希值,然后给这个字段创建索引。
多列索引的顺序很重要,通常,不考虑排序和分组查询时,应该把选择性(选择性是指某表索引列不同数据的个数/总行数。选择性高意味着重复数据少)大的列放到前面。简单地说,某些查询只需要查询索引列,那么就不用再根据索引B树节点记录的主键ID进行二次查询了。
以上就是关于mysql索引优化部分内容,如果有什么不懂的,可以留言与小编互动哦!
六星教育是六星教育网络科技有限公司旗下的专属培训机构,从事网站开发培训,网络营销培训,细分为PHP技术培训,JAVA技术培训,HTML5前端技术培训,Python大数据Linux运维培训,每年为社会培养大量的IT人才! |
|