Mysql索引

结构

二叉查找树

        左子树小于根节点。

        缺点:当顺序插入时查询效率低,当数据量大的时候层级较深,查询效率低

平衡二叉树

        在符合二叉查找树的条件下,还满足任何节点的两个子树的高度最大差为1。

        缺点:当数据量大的时候层级较深,查询效率低

平衡多路查找树(B-Tree)

        度数为n的B-Tree数有n - 1个key以及n个指针,每个节点不仅包含数据的key值,还有data值。

        缺点:当存储的数据量很大时同样会导致B-Tree的深度较大,增大查询时的磁盘I/O次数,进而影响查询效率。

B+Tree

        B+Tree是在B-Tree基础上的一种优化 。B+Tree的非叶子节点只存储键值信息,所有叶子节点之间都有一个链指针,数据记录都存放在叶子节点中。

        优点:层级少,效率高。

hash

        哈希索引是采用一定的哈希算法,将键值换成新的哈希值,映射到对应的槽位上,然后储存在哈希表中,查询效率高。

        缺点:只能等值查询,无法进行排序操作。

分类

主键索引:

        针对表中主键创建的索引,默认自动创建,只能有一个。

        关键字:PRIMARY

唯一索引:

        避免同一个表中某数据列中值重复,可以有多个。

        关键字:UNIQUE

常规索引:

        快速定位特定数据,可以有多个。

        关键字:无

全文索引:

        全文索引查找的是文本中的关键词,而不是比较索引中的值,可以有多个。

        关键字:FULLTEXT

聚集索引(innoDB):

        将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据,有且只有一个。

二级索引(innoDB):

        将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键,可以存在多个。

因为二级索引只存了索引和主键所以当使用二进索引查找所有数据时会发生回表查询。

语法

创建索引

CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name (index_col_name,... ) ;

关联一个字段的叫单列索引,关联两个字段的叫联合索引

查看索引

SHOW INDEX FROM table_name ; 

 删除索引

DROP INDEX index_name ON table_name ;

 性能分析

执行频率

-- session 是查看当前会话 ;
-- global 是查询全局数据 ;
SHOW GLOBAL STATUS LIKE 'Com_______';

explain(查看索引信息)

-- 直接在select语句之前加上关键字 explain / desc
EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件;

Explain 执行计划中各个字段的含义:

使用规则 

最左前缀法则(组合索引)

        如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始, 并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)

        注:与输入顺序无关,按创建索引时的顺序判断

索引失效的原因 

        未遵守最左前缀法则(部分失效)

        使用了不带等号的范围查询(<, >)

        使用or时有字段未建立索引(单列索引,有组合索引不算)

        在查询时进行了运算或者字符串不加引号(进行了类型转换操作)

        进行了模糊查询(只要前面带了%才会失效)

        mysql评估不使用索引反而更快时

SQl提示

  建议使用idx索引

select * from user use index(idx) where id = 1;

  不使用idx索引

select * from user ignore index(idx) where id = 1;

   强制使用force索引

select * from user force index(idx) where id = 1;

覆盖索引

        覆盖索引是指 查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到 ,而不需要再进行回表查询。

 前缀索引

语法

create index idx_xxxx on table_name(column(n)) ;

前缀长度

        可以根据索引的选择性来决定,而选择性是指不重复的索引值(基数)和数据表的记录总数的比值,
        索引选择性越高则查询效率越高, 唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的。
select count(distinct email) / count(*) from tb_user ;
select count(distinct substring(email,1,5)) / count(*) from tb_user ;

大学助农扶贫微信小程序-毕业设计,基于微信小程序+SSM+MySql开发,源码+数据库+论文答辩+毕业论文+视频演示由于APP软件在开发以及运营上面所需成本较高,而用户手机需要安装各种APP软件,因此占用用户过多的手机存储空间,导致用户手机运行缓慢,体验度比较差,进而导致用户会卸载非必要的APP,倒逼管理者必须改变运营策略。随着微信小程序的出现,解决了用户非独立APP不可访问内容的痛点,所以很多APP软件都转向微信小程序。本次课题就运用了微信小程序技术开发一个沈阳工业大学助农扶贫微信小程序。本次使用数据库工具MySQL以及微信开发者工具开发的沈阳工业大学助农扶贫微信小程序,可以实现目标用户群需要的功能,其中管理员管理注册农户以及注册用户的信息,统计订单,管理商品,商品评价,商品退货等信息。农户管理销售的商品,对订单商品进行发货,管理配送订单,管理商品评价,审核商品退货信息。用户收藏商品,购买商品,支付订单,申请商品退货,评价订单商品。总之,沈阳工业大学助农扶贫微信小程序可以更加方便用户购买农户销售的商品,也让农户方便管理销售的商品,管理商品订单以及订单配送信息,该平台不仅能够帮助农户销售农产品,还能增加农户的收入。关键词:沈阳工业大学助农扶贫微信小程序;订单;商品;退货;Java
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值