sql数据库优化

本文深入探讨了数据库索引的工作原理,包括B树和B+树的特性,解释了为何索引能提高查询效率并减少I/O操作。同时,文中详细说明了如何根据不同字段类型创建索引,以及null值在索引中的处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

索引;     频繁更新的字段不适合做索引    优势:提高查询效率,本质上就是降低IO的使用率 降低cpu使用率 假如说排序如果不适用索引,它得一个一个查询出来
再排序,如果使用了索引,它是一个B树 已经是排好序的了(B树,小的放左,大的放右)

B+树种查询任意的数据次数:n次(B+树的高度)   因为B+树种数据全部存在叶节点上面   


如果索引字段为null,则会使用一个字节来标识一下这个字段可以为null

例如:name字段not null      name1字段可以为null   两个字段都添加成为了索引字段
-------------------------------------------------------------------------------------------+
| test_k1 | CREATE TABLE `test_k1` (
  `name` char(20) CHARACTER SET utf8 NOT NULL DEFAULT '',
  `name1` char(20) CHARACTER SET utf8 DEFAULT NULL,
  KEY `index_name` (`name`),
  KEY `index_name1` (`name1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |

explain select * from test_k1 where name='';  //这样执行的时候ken_len=60
explain select * from test_k1 where name1=''; //这样执行的时候ken_len=61
原因就是因为索引字段为null时候,会花费一个字节用于标识


删除索引操作:
drop index index_name on test_k1;
drop index index_name1 on test_k1;

然后在这个表中增加一个复合索引
alter table test_k1 add index name_name1_index(name,name1);
explain select * from test_k1 where name='';  //这样执行的时候ken_len=60
explain select * from test_k1 where name1=''; //这样执行的时候ken_len=121

因为你用到的是name1索引,因为是复合索引,当你用name1的时候,你肯定得用到name这个索引 这时候是120,由于name1索引可以为空所以占用一个字节的长度


增加一个字段用可变字符varchar()来表示,刚才那两个name,name1字段使用的char()字段    也把这个字段添加成索引字段
alter table test_k1 add column name2 varchar(20);
alter table test_k1 add index index_name2(name2);

explain select * from test_k1 where name2=''; //这样执行的时候ken_len=63 

这个63是因为name2字段是可变字段varchar用2个字节来表示varchar  还有就是可以为null也占用一个字节 所以总共是63个字节

uft8:1个字符3个字节
gbk: 1个字符2个字节
latin:1个字符1个字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值