mysql高性能索引(Ⅰ)

在开发中,我们知道大多数应用的瓶颈在于sql语句的执行时耗,在这里并不讨论sql语句的安全,仅仅讨论高性能sql语句,而与高性能sql语句紧密相连的就是传说中的----索引。

索引--一种工作在存储引擎端的用于快速找到记录的一种数据结构。

mysql使用索引的方式是:先找到索引的值,再根据索引的值找到数据行。

索引之B-Tree索引

B-Tree索引通常意味着所有的值都是按顺序存储的,每个叶子节点到根的距离相同。图示:

B-Tree索引能够快速的访问数据,因为存储引擎不需要进行全表扫描来获得数据,理论上B-Tree的搜索时间复杂度不超过O(㏒2(M))。

本文测试用例:

表:tbprofitshop

字段数:15

记录数:20w

关于B-Tree索引的一些限制:

⑴.如果不是按照索引的最左前缀索引,则无法使用索引。主索引:id,普通索引:fdPhone

如:

而这样则会使用索引:

⑵.不能跳过索引中的列。主索引:id,联合索引:(fdPhone,fdCreate),如:

此处跳过fdPhone而直接利用fdCreate,查询则无法使用索引。

⑶.如果查询中有某列的范围查询,则其右边所有列都无法使用索引优化查询。主索引:id,联合索引:(fdPhone,fdCreate)。如:

注:在开发中,经常看见数字类型的字符串,然后大火就直接使用数字类型了。数据应与字段类型匹配,在这个例子中fdPhone是字符类型,我们以数字类型使用看看如何:

再以字符串类型来看看是怎样的:

ALL:在索引构建中,索引构建的顺序似乎很重要,它往往是索引高效与否的关键所在。

时间: 2024-10-12 21:19:56

mysql高性能索引(Ⅰ)的相关文章

mysql之高性能索引

mysql之高性能索引 当db的量达到一定数量级之后,每次进行全表扫描效率就会很低,因此一个常见的方案是建立一些必要的索引作为优化手段,那么问题就来了: 那么什么是索引呢? 索引的实现原理是怎样的? 我们通常说的聚集索引,非聚集索引的区别是什么? 如何创建和使用索引呢? I. 索引介绍 MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构.简而言之,索引是数据结构 1. 几种树的结构 a. B+树 单来说就是一种为磁盘或者其他存储设备而设计的一种平衡二叉树,在B+tree中所

Mysql优化之创建高性能索引(一)

1.索引基础 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.但是不恰当的索引随着数据量的增加,也会使整个数据库的性能下降. 举个例子: select a from b where id = 5; 如果在id上建立索引,则Mysql会使用该索引找到id为5的行,也就是说,Mysql现在索引按值进行查找,然后返回所有包含该值的数据行.索引也可以包含一列或者多列,列的顺序也十分重要,因为Mysql只能高效地使用索引的最左前缀列. 索引优化应该是查询性能优化最有效

Mysql数据库索引

索引(Index)是帮助mysql高效获取数据的数据结构.对于高性能非常关键. 索引的重要性主要体现在数据量非常大的时候.规模小,负载轻的数据库即使没有索引也可以获到好的查询效果 例如: 1 mysql>select first_name from actor where actor_id=5; 改索引列位于actor_id列,因此mysql会使用索引找到actor_id为5的行. 索引有很多种类型,各自有各自的特点.索引实在存储引擎层实现的,而不是服务器层. (1).B-Tree索引 谈论引擎

MySQL之索引

要理解 mysql中索引是如何工作,最简单的方法就是看看一本书的"索引"部分(即目录).然后通过索引找到指定的页码. 在mysql中,存储引擎用类似的方法使用索引,首先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行. 在mysql中,索引是在存储引擎层而不是服务器层实现的. 索引的优点: 索引可以让服务器快速定位到表的指定位置,但这并不是索引的唯一作用,到目前为止可以看到,根据索引的数据结构不同, 索引页有一些附加作用. 最常见的b-tree索引,按照顺序存储数据,所以my

建立高性能索引

(1)隔离列 如果在查询中没有隔离索引的列,mysql通常不会使用索引."隔离"列意味着它不是表达式的一部分,也没有位于函数中. 如以下的查询将不会使用actor_id上的索引 1 mysql>select * from actor where actor_id +1 = 5 我们虽然很容易的看出actor_id=4但是mysql却不会帮你解方程. 例如 1 mysql>select ... wher date_col >=TO_DAYS(CURRENT_DATE)

对mysql联合索引中的字段进行合理排序

在MySQL的where条件中,有时会用到很多的条件,通常为了加快速度会把这些字段放到联合索引中,可以更快的提高搜索速度: 但是对联合索引中字段顺序的合理排序,便更能提高速度 例子:select * from table where (groupid=1000) and (userid=500) and (time=140012345) 建立的索引也通常很随性的就按照where条件中字段的顺序建立 ALTER  TABLE  table  ADD  INDEX g_u_time_index(gr

[MySQL-笔记]创建高性能索引

索引,MySQL中也叫"键",是存储引擎中用于快速找到记录的一种数据结构,具体的工作方式就像书本中的索引一样,但是具体的实现方式会有差别. 一.索引分类 B-Tree索引: 优点: MyISAM中,索引根据数据的物理位置引用被索引的行,InnoDB中根据主键引用被索引的行. B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,而是从索引的根节点开始进行搜索. B-Tree对索引列是顺序组织存储的,所以很适合查找范围数据. 一般来说,B-Tree可以

数据库 之 MySQL的索引

1  概述 本文将介绍索引的相关概念,以及用EXPLAIN来分析索引 2  索引的相关概念 索引是指提取索引的创建在的表上字段中的数据,构建出一个独特的数据结构: 索引的作用:加速查询操作:副作用:降低写操作性能: 表中数据子集:把表中某个或某些字段的数据提取出来另存为一个特定数据结构组织的数据: 某个字段或某些字段:WHERE子句中用到的字段: 索引对写操作有影响,写操作只能放在对应的位置. 索引本身是平衡树.其排序是分层构建的. 索引能够加速读操作,但是对写操作是相反的效果.因为多一次索引就

MySQL的索引优化,查询优化

MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. MySQL逻辑架构,来自:高性能MySQL MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理.授权认证.安全等功能均在这一层处理. MySQL大多数核心服务均在中间这一层,包括查询解析.分析.优化.缓存.内置函数(比如:时间.数学.加密等函数).所有的跨存储引擎的功能也在这一层实现:存储过程.触发器.视图等.