索引的建立与理解(什么情况下不用?为什么?)(保姆级理解)

一:索引的建立

import pandas as pd
import sqlite3

conn=sqlite3.connect('new.db')

cur=conn.cursor()

sql='''
   create table new1(
    id INT,
          name TEXT,
          age INT

   )

'''

cur.execute(sql)
conn.commit()

sql='''
    insert into new1 values(1001,'linweiqi',19)
'''

cur.execute(sql)
conn.commit()

conn.close()

conn=sqlite3.connect('new.db')

cur=conn.cursor()

sql='''
  create index index_id on new1(id);
'''

cur.execute(sql)
conn.commit()

conn.close()

在此之中我们执行了三个sql语句,前两个sql语句分别代表数据库数据表的创建和插入一行数据(欲知基本sql语句的创建,请看作者的”python中使用SQLite3对数据库的基本操作(基于ubuntu操作系统)”一文!),第三个sql语句就是创建一个索引,具体格式如下:

create index 索引名 on 表名(列名)

ps:索引名可以随便取(至于拿来干什么下面会加以说明),表名和列名表示你想要创建索引的表和列

二:索引的避免运用情况及理解

索引主要是用来加快我们查寻表数据的速度,避免运用的几种情况也是基于运用索引之后并没有加速搜索,甚至减缓搜索速度。

1:索引不应该用在较小的数据表上,在小数据表中与没索引状态搜索能力基本没差别,甚至更差。

2:索引不应该使用在有频繁的大批量的更新或插入操作的表上,因为每次更新后要重新索引,数据库负荷过大,如果表比较大,则严重影响数据的进出入库,以及查询速度。

1:索引搜索快的原理:

new1 idnameageindex_id(隐形列)1002linweiqi11910011001linweiqi22010021005linweiqi3211005

如图所示,我们所创建的数据表是前三列,’index_id’是我创造的列名’id’的索引列(可以理解为是隐形列),你在实际的数据表中看不到,它储存于数据库中,为了便于理解我写了出来。

其实我们不加索引时,搜索一行数据是要将所有的数据行全部游历一遍,然后提取出所符合的数据,而索引的本质是根据设置索引的列名(id),创造出一列与原来列(id)相对应的隐形列(index_id),然后隐形列(index_id)会根据一定的方法进行合理排序(如图中的我举例的方法是从小到大排序),搜索一行数据原理是先寻找隐形列(index_id),然后运用算法(如:二叉树等)进行搜索找出想要搜索出那一行的id=1005(假如要搜索id=1005这一行数据),然后通过函数映射找到原来列(id)中对应的id=1005那一行然后提出数据。

所以,为什么索引不应该用在较小的数据表上?

因为在数据小的表中在没有索引的时候比有索引时,检索速度更快,并且有索引中的隐形列会占据一定的内存,加上索引没有什么好处。

为什么索引不应该使用在有频繁的大批量的更新或插入操作的表上?

因为如果一张数据表插入数据时,因为隐形列会根据一定的方法来排序,插入一行相当于要隐形列又重新排列,在小数据表中可能工作量增加的不是很明显,但在多维数据表中,要全部重新排列是要花费相当大的计算量的,所以在使用在有频繁的大批量的更新或插入操作的表上,不应该加上索引

Original: https://blog.csdn.net/weixin_57643648/article/details/122585041
Author: 小林学编程
Title: 索引的建立与理解(什么情况下不用?为什么?)(保姆级理解)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816627/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球