目录
2.将account单独提取出来,与该条数据对应的地址组成键值对
为什么要设置索引?
要求:在admin表中有45万条数据,现在要查询account等于"10000"的那条数据
代码:
SELECT * FROM `admin` WHERE account = "10000"

如果没有索引,该代码会遍历一遍数据库中所有数据直到找到account等于"10000"的数据为止,这样消耗的时间复杂度是O(n),如图在有45万条数据的情况下消耗的时间是0.098s

如果有一千万条数据的话,那么花费的时间会更多,如果是投入使用的产品则会显著降低用户的使用体验,除了减少查询时间外,由于设置索引后内存只需要导入较小的索引文件,提升了内存的使用效率
索引是什么?
索引是将我们想要查询的字段单独提取出来,与该条数据的地址以key-value的方式组合成一条数据,再将组合后的数据在内存中以算法排成有序二叉树,在查询时时间复杂度只有O(logn)
1.该图中我们想要对account添加索引

2.将account单独提取出来,与该条数据对应的地址组成键值对

3. 变成有序二叉树结构
加入索引后,存储数据的数据结构就变成了有序二叉树结构,这样查询数据时,按照树的结构来查询,查询的时间复杂度只有O(logn)
存储方式:数据+地址

如何设置索引:
进入表设计页面,点击索引,设计account成索引,索引方法设置成树
最终效果:
加了索引后再对account进行条件查询 ,这时只花费了0.015s,提升了6倍的速度

关于添加索引的面试点:
Q:什么样的字段不能设置成索引?
A:唯一性不高不能代表一条数据的,如性别字段,总共只有男女两种选项设置成索引也没有用
Q:为什么不把所有能设置成索引的字段都设置成索引?
A:索引 也要占用物理空间,如果设置过多索引的话反而是降低了使用效率
Q:哪些SQL语句会破坏索引(某些查询条件没办法使用到索引)
A:大范围查询,因为索引是精准查询,所以在查询条件是一个很大的范围时不能使用
如:查询所有学号不是101和102的学生
select * from student where stu_num not in(101,102)
Q:索引适合应用在什么场合?
A:在具有很多数据和很高的并发量的时候
本文探讨了数据库设置索引的重要性,解释了索引的概念,通过有序二叉树结构展示了索引如何加速查询,并提供了设置索引的方法。讨论了添加索引对查询速度和内存使用效率的提升,同时指出了不适合设置索引的字段类型和可能导致索引失效的SQL语句,适合高并发和大数据量场景。
1192

被折叠的 条评论
为什么被折叠?



