pymysql ,主键, 索引
1|0一、pymysql模块的使用
1|11. 安装pymysql
pymysql
属于第三方库,要先下载安装。
1|22. 连接MySQL
- 连接并操作MySQL的步骤
-
创建连接
-
创建游标
-
创建SQL语句
-
执行SQL语句
-
接收查询结果(当对数据进行查询时,才会有此步骤)
fetchall()/fetchone()/fetchmany(size)
查询结果是列表套字典的格式。若返回的是空,根据创建游标时,让返回的数据是列表套字典形式还是默认的元组形式。对应为[]或()
-
提交(当对数据进行增、删、修改时,才会有此步骤)即
commit()
-
关闭游标
-
关闭连接
-
- 查询实例:
- 插入实例:
print(cursor.lastrowid) ### 获取最后一行的ID值
在插入时使用才有效果,在其他sql语句中,返回的是None
1|33. sql注入问题
-
产生原因:因为过于相信用户输入的内容,对输入的内容根本没有任何的检验,导致内容中一些关键字符传入,在执行含有这些关键字符的SQL语句时,返回了不正确的结果。
-
实例:
-
解决的方法:注意下面的星号中间的内容
-
对用户输入的内容进行检验之后,再写入SQL语句
-
利用pymysql的内置方法排查。
以下是第二种方法的实例:
2|0二、索引
2|11. 什么是索引
- 索引在MySQL中也叫是一种“键”,是存储引擎用于快速找到记录的一种数据结构
2|22. 索引有什么用
-
加快查询速度。
-
mysql中的primary key,unique,联合唯一也都是索引,这些索引除了加速查找以外,还有约束的功能
-
注意1:虽然索引能加快查询速度,但并不是索引越多越好,当数据过多时,创建索引需要的时间也越多,而且还会占用更多的磁盘空间。 若索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响,要找到一个平衡点,这对应用程序的性能至关重要 。
-
注意2:说白了,每一个索引就相当于备份了一个已经排好序的一张表,所以,增删改这3种操作都会因为有索引而影响他们的完成速度。其中增操作影响最大,删操作叫增来说影响较小,改操作只有涉及到建立索引的字段才受影响
2|33. 索引的底层原理
- 索引底层的算法使用的是 B+树 。
2|44. 主键
1、数据库的每张表只能有一个主键,不可能有多个主键。
2、所谓的一张表多个主键,我们称之为联合主键。
注:联合主键就是用多个字段一起作为一张表的主键。
3、主键的作用是保证数据的唯一性和完整性,同时通过主键检索表能够增加检索速度。
2|55. MySQL中索引的分类
- 普通索引INDEX:加速查找
- 唯一索引:
- 主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复)
- 唯一索引UNIQUE:加速查找+约束(不能重复)
- 联合索引:
- PRIMARY KEY(id,name):联合主键索引
- UNIQUE(id,name):联合唯一索引
- 添加了联合唯一索引的这些字段,我们可以对其任意一个再添加单个的普通索引。如
unique(a,b) , 之后还可以 alter table 表名 add index 字段名1(a) alter table 表名 add index 字段名2(b)
- 对于添加了联合唯一索引的字段,它的唯一性指的是全部字段数据作为一个整体,不能和其他整体相同。如
unique(a,b) a,b是字段名,int类型,我们插入(1,2)之后不能插入(1,2)了,但可以插入 (1.3)或(2,2)等等
- 添加了联合唯一索引的这些字段,我们可以对其任意一个再添加单个的普通索引。如
- INDEX(id,name):联合普通索引
- 添加了联合普通索引的这些字段,我们可以对其任意一个再添加单个的普通索引
2|66. 索引的创建
(0)创建索引的技巧:
- 在开发程序时,一边开发一边创建, 在需要的地方添加索引
- 对查询频率高的字段创建合适类型的索引
- 尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0
- 注意2:在向一张表中插入数据时,若之前已经对该表的字段建立了索引,则数据库会先把索引删掉,再插入数据,之后再把索引添加回来。所以,我们在向表中录入大量数据时:若是新表,录入数据之后再创建索引;若是已经有索引的表:先把原来的索引删掉,等数据录入完成后,再把索引恢复。通过这样的两种方法这样会大大提高数据库录入大量数据的效率。
其他注意的地方:
- 避免使用select *
- 避免使用count(*)
- 创建表时尽量使用 char 代替 varchar
- 表的字段顺序固定长度的字段优先
- 组合索引代替多个单列索引(由于mysql中每次只能使用一个索引,所以经常使用多个条件查询时更适合使用组合索引)
- 尽量使用短索引
- 使用连接(JOIN)来代替子查询(Sub-Queries),即代替嵌套查询
- 连表时注意条件类型需一致
- 索引散列值(重复少)不适合建索引,例:性别不适合
(1)创建主键索引
-
创建表时创建主键索引
-
创建表后创建主键索引
-
删除主键索引
(2)创建唯一索引
-
创建表时创建唯一索引
-
创建表后创建唯一索引
-
删除唯一索引
(3)创建普通索引
-
创建表时创建普通索引
-
创建表后创建普通索引
-
删除普通索引
(4)联合索引的创建
- 联合索引的创建只是在创建其他索引时,字段是多个而已
- 什么时候创建联合索引
2|77. 索引未命中情况
- 范围问题,或者说条件不明确,条件中出现这些符号或关键字:>、>=、<、<=、!= 、between...and...、like
8. explain查看SQL语句执行情况
注意:判断是否命中索引最准确的还是要看 rows 这一行的结果。
2|89. 索引覆盖
2|910.慢日志管理
步骤:
-
查看慢日志的变量
__EOF__

本文链接:https://www.cnblogs.com/Mcoming/p/11773021.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!