For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
MySQL数据库的学习应用是大多数后端编程开发程序员都需要具备的一个编程知识,而本文我们就通过案例分析来简单来就一下,MySQL数据库索引原则与作用分析。
一般当我们数据库中的某些查询比较慢的时候,正常情况下,一顿分析下来,大多数我们会考虑对这个查询加个索引,那么索引是如何工作的呢?为什么索引能加快查询的速度,下面来具体的分析下。
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
索引的优点:
1、索引大大减少了服务器需要扫描的数据量;
2、索引可以帮助服务器避免排序和临时表;
3、索引可以将随机I/O变成顺序I/O。
如何评价一个索引,RelationalDatabaseIndexDesignandtheOptimizers一书介绍了如何评价一个索引是否符合某个查询的三个星际判断标准:
1、一星:索引将相关的记录放在一起就评定为一星;
2、二星:如果索引中的数据顺序和查找中的排序顺序一致就评定为二星;
3、三星:如果索引中的列包含了查询中需要的全部列就评定为三星。
建索引的几大原则
1、左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a=1andb=2andc>3andd=4如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整;
2、=和in可以乱序,比如a=1andb=2andc=3建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式;
3、尽量选择区分度高的列作为索引,区分度的公式是count(distinctcol)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录;
4、索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time)=’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time=unix_timestamp(’2014-05-29’);
5、尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。
索引的实现
InnoDB支持三种索引模型:
1、哈希索引;
2、全文索引;
3、B+树索引。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。