mysql创建索引

MySQL 查询优化器(三)

我的梦境 提交于 2019-12-03 04:01:51
2、复合查询 在进行复合查询时,为了体现外连接(left join、right join)和一般联合查询的区别,对student表增加了几条记录,而这几条记录在std_cur和course中都没有对应的记录。 2.1 多表联合查询 多表联合查询的逻辑处理过程如下所示: JOIN:prepare阶段 setup_tables():对查询涉及的表,逐个查看是否存在,设置变量相应的值,为查询准备。 setup_fields():对查询的字段进行检查,不同于之前1.1的检查,该过程中如果不指定具体数据表的字段的话,将会对所有查询的数据表进行检查。 setup_conds():检查查询的where条件中字段是否存在,同样如果不指定具体数据表的字段,将会对所有查询的数据表进行检查。(sql_base.cc:8379) JOIN:optimize阶段 simplify_joins():如果可以将外连接简化为内连接处理,那么简化为内连接处理。此外,如果查询为内连接或者外连接查询使用的表拒绝 NULL值,那么将ON条件添加到where条件中,将表的连接操作转化为联合查询处理。在该测试中,由于没有显示的JOIN ON操作,因此不做以上处理。 optimize_cond():优化查询的where条件,对等值条件调用build_equal_items()(sql\sql_select.cc:8273

sql语句性能优化介绍

强颜欢笑 提交于 2019-12-03 03:36:02
一,SQL语句性能优化 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2,应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。 3,应尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。 4,应尽量避免在 where 子句中使用 or 来连接条件, 否则将导致引擎放弃使用索引而进行全表扫描, 可以 使用UNION合并查询: select id from t where num=10 union all select id from t where num=20 5,in 和 not in 也要慎用,否则会导致全表扫描,对于连续的数值,能用 between 就不要用 in 了:Select id from t where num between 1 and 3 6,下面的查询也将导致全表扫描:select id from t where name like ‘%abc%’ 或者select id from t where name like ‘%abc’若要提高效率,可以考虑全文检索

pymysql操作数据库与索引

一曲冷凌霜 提交于 2019-12-03 02:59:43
目录 pymysql操作数据库 简单操作 sql的注入问题 sql注入问题解决办法 sql注入问题模板总结 利用pymysql操作数据库 (增删改),conn.commit() 索引 1.为何要有索引 2.什么是索引? 3.索引使用的优缺点  4.索引原理 5.索引的种类 索引的创建 主键索引 唯一索引  普通索引 pymysql操作数据库 简单操作 import pymysql # pip install pymysql # 连接数据库的参数 conn = pymysql.connect(host= 'localhost', user='root', password = '123', database='db3', charset = 'utf8') # cursor = conn.cursor() # <pymysql.cursors.Cursor object at 0x000000000A0E2C50>,游标对象,默认返回的值是元祖类型 cursor = conn.cursor(cursor = pymysql.cursors.DictCursor) # <pymysql.cursors.DictCursor object at 0x000000000A0E2C88> 返回的值是字典类型 # print(cursor) sql = "select name from

MySQL 04

旧城冷巷雨未停 提交于 2019-12-03 02:58:52
目录 python操作mysql mysql sql注入问题 问题描述 解决办法 增/删/改 查询 索引 基本概念 索引的原理 mysql索引种类 普通索引 唯一索引 联合索引 创建索引 正确使用索引 索引未命中 最左前缀 索引覆盖 explain 慢查询日志 基本概念 配置 python操作mysql mysql ''' mysql> select * from user_info; +----+------+----------+ | id | name | password | +----+------+----------+ | 1 | bigb | 123456 | +----+------+----------+ 1 row in set (0.00 sec) ''' import pymysql user_name = input('请输入用户名: ').strip() password = input('请输入密码: ').strip() # 连接数据库 conn = pymysql.connect( host='localhost', user='root', password='123', database='db3', charset='utf8' ) # 游标 cursor = conn.cursor() # 默认以元祖返回 # cursor = conn

MySQL python操作MySQL 索引

不想你离开。 提交于 2019-12-03 02:51:56
目录 使用python 操作MySQL 先去客户端下载安装pymysql 模块: pip install pymysql sql注入问题 注入问题是指:通过输入特殊字符,让校验代码失效,从而通过验证。 解决方法: 对用户输入的内容进行过滤和规范 查 增 索引 作用:提高查询效率 本质:是一个特殊的文件 原理:B+树 分类: 索引的创建和删除 索引的优缺点: 不会命中索引的情况: 使用python 操作MySQL 先去客户端下载安装pymysql 模块: pip install pymysql import pymysql user = input('输入用户名:').strip() pwd = input('输入密码:').strip() 连接数据库用到的参数 conn = pymysql.connect(host='localhost', # 指定连接本地服务器 user='root', # 登录服务器 用的用户名 password='123', # 登录服务器用的密码 database='test', # 指定目标数据库 charset='utf8') # cursor = conn.cursor() # 调用conn.cursor()实例化一个对象命名为cursor,用于操作数据库。默认返回的值是元祖类型 cursor = conn.cursor(cursor=pymysql

day 36小结

喜夏-厌秋 提交于 2019-12-03 02:51:47
目录 python操作mysql sql 注入问题 索引 索引的种类 主键索引 唯一索引: 普通索引 慢查询日志: python操作mysql ​ 首先安装模块pymysql ​ 方法: pip install pymysql sql 注入问题 输入用户名: zekai ' or 1 =1 # 输入密码: dasadf select * from user where name = 'zekai' or 1=1 #' and password = dadf' ​ 产生的原因: 太过于相信用户输入的内容,没有做任何校验 ​ 解决办法 sql = "select * from user where name==%s and password=%s" corsor.execute(sql,(user,pwd)) ​ 连接: conn = pymysql.connect(host='localhost',user='root',password='123qwe',database='test',charset='utf8') # cursor = conn.cursor() ## 默认返回元组类型 cursor = conn.cursor(cursor=pymysql.cursors.Dict Cursor) ## 返回的值是字典类型 ​ 查 fechall() : 取出所有的数据

day36

点点圈 提交于 2019-12-03 02:51:35
Python操作mysql pymysql 安装: pip install pymysql import pymysql #连接数据库的参数 conn=pymysql.connect(host='localhost',user='root',passward='',database='tt',charset='utf8') #cursor=conn.cursor() #默认返回的值是元组类型 cursor=conn.cursor(cursor=pysql.cursors.DictCursor)#返回的值是字典类型 sql="select * from userinfo" cursor.execute(sql) #res=cursor.fetchall() #取出所有的数据 返回的是列表套字典 #res=cursor.fetchone() #取出一条数据 返回的是字典类型 res=cursor.fetchmany(12) #指定获取多少条数据 返回的是列表套字典 print(res) cursor.close() conn.close() # 运行结果: [{'id': 1, 'name': 'zekai', 'depart_id': 1}, {'id': 2, 'name': 'xxx', 'depart_id': 2}, {'id': 3, 'name': 'zekai1',

mysql4

血红的双手。 提交于 2019-12-03 02:47:27
python操作mysql 连接数据库 import pymysql ### 连接数据库的参数 conn = pymysql.connect( host='localhost',user='root',password='',database='zy',charset='utf8' ) # cursor = conn.cursor() ### 默认返回的值是元祖类型 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) ### 返回的值是字典类型 (*********) sql = "select * from class" cursor.execute(sql) # res = cursor.fetchall() ###取出所有的数据 返回的是列表套字典 # res = cursor.fetchone() ###取出一条数据 返回的是字典类型 res = cursor.fetchmany(12) ### 制定获取多少条数据 返回的是列表套字典 print(res) ### 元组类型 ((1, 'zekai', 1), (2, 'xxx', 2), (3, 'zekai1', 3)) cursor.close() conn.close() pymysql的sql注入 sql注入问题 输入用户名:zekai ' or 1=1

day36 pymysql 索引

冷暖自知 提交于 2019-12-03 02:39:30
pymysql 安装:pip install pymysql 连接 import pymysql # 连接数据库的参数 conn =pymysql.connect(host='localhost',user='root',password='',database='feng',charset='utf8') # cursor=conn.cursor()#默认返回的值是元祖类型 cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#返回的值是字典类型 查 import pymysql # 连接数据库的参数 conn =pymysql.connect(host='localhost',user='root',password='',database='feng',charset='utf8') # cursor=conn.cursor()#默认返回的值是元祖类型 cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#返回的值是字典类型 sql="select * from userinfo" cursor.execute(sql) # res=cursor.fetchall()#取出所以的数据,返回的是列表套字典 res=cursor.fetchone()#取出一条数据

pymysql的操作

假如想象 提交于 2019-12-03 02:37:28
目录 python 操作mysql 安装pymysql 模块 sql注入问题 产生的原因 解决的方法 连接 查 增 修 删 索引 使用索引的作用 索引的本质 索引的底层原理 索引的种类 索引的创建 主键索引 唯一索引 普通索引 索引的优缺点 不会命中索引的情况 慢查询日志 查看慢SQL的相关变量 配置慢SQL的变量 python 操作mysql 安装pymysql 模块 pip install pymysql sql注入问题 输入用户名: qaa ' or 1=1 # 输入密码: dasdasdsa select * from user where name='qaa' or 1=1 #' and password='afasa' 不需要输入正确用户名和密码就能查看数据 产生的原因 因为过于相信用户输入的内容,根本没有做任何的检验 解决的方法 sql = 'select * from user where name=%s and password=%s' cursor.execute(sql,(user,pwd)) 用 cursor.execute 来检验输入的用户名和密码 连接 连接数据库的参数 conn = pymysql.connect(host='localhost',user ='root',passwrod ='123',database='test',charset=