mysql创建索引

MySql学习笔记06

易管家 提交于 2019-12-03 11:51:09
课程回顾 一对一关联 案例1:查询每个员工的名字和主管领导的名字 select e.ename 员工姓名,m.ename 领导姓名from emp e join emp mon e.mgr=m.empno; 案例2: 查询主管领导名字为blake的所有员工名字 select e.ename 员工姓名,m.ename 领导姓名 from emp e join emp m on e.mgr=m.empno where m.ename='blake' 案例3:查询有商品的分类信息及上级分类信息 往t item category表内部插入以下数据 id 162 name 办公用品 id 229 name 文具 id 913 name 户外用品 -插入数据 insert into t item category (id,name) values(162,'办公用品'),(229,'文具'),(913,'户外用品'); -查询所有有商品的分类id SELECT DISTINCT category id FROM t item WHERE category id IS NOT NULL -查询分类详情 select * from t item category where id in (SELECT DISTINCT category id FROM t item WHERE category

day44

爷,独闯天下 提交于 2019-12-03 11:44:57
目录 pymysql操作mysql 安装: 使用的时候导入: 连接数据库的参数: pymysql的sql注入 sql注入问题 产生的原因: 解决的方法: 连接: 查: 增: 修: 删除: 索引 为什么实用索引以及索引的作用: 类比: 索引的本质: 索引的底层原理: 索引的种类:(********************) 主键索引: 唯一索引: 普通索引: 索引的创建: 主键索引: 唯一索引: 普通索引: 索引的优缺点: 慢查询日志: pymysql操作mysql 安装: pip install pymysql 使用的时候导入: import pymysql 连接数据库的参数: import pymysql conn = pymysql.connect(host='localhost',user='root',password='123',database='test',charset='utf8') # cursor = conn.cursor() 默认返回的值是元组类型 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 返回的值是字典类型(********) sql = "select * from userinfo" cursor.execute(sql) # res = cursor.fetchall() #

让你的sql开启氮气加速

我的梦境 提交于 2019-12-03 11:17:11
事情的过程是:公司有一个上百行的sql 运行在MySQL数据库,速度奇慢无比,逻辑乱七八糟,我就不贴出来了,经过这次修改想总结一下如何写一个不被人骂的sql。 说一些被人诟病的问题: 一、子查询   把你的子查询全部改为 join!!! 把你的子查询全部改为 join!!! 把你的子查询全部改为 join!!! 不要搞子查询,因为子查询的速度真的很慢。 把你用到的表先准备出来,找好关联关系做成 left join 或者 inner join 别问我为什么不用 right join mysql里面没有啊~ 二、没索引    几个必须加索引的地方:   1.主键自动建立唯一索引   2. 频繁作为where条件语句查询的字段   3. 关联字段需要建立索引,比如join表 on的字段   4. 排序字段可以建立索引   5. 分组字段可以建立索引,因为分组的前提是排序   6. 统计字段,聚合函数 可以建立索引,例如count(),max()    当然索引也不是哪都合适的:   1.频繁更新的字段不适合建立索引   2.where条件中用不到的字段不适合建立索引   3.表数据可以确定比较少的不需要建索引 少于1000条   4.数据重复且发布比较均匀的的字段不适合建索引(唯一性太差的字段不适合建立索引),例如性别,状态   5. 参与列计算的列不适合建索引    索引什么时候会失效

Mysql优化一

喜夏-厌秋 提交于 2019-12-03 11:05:54
Mysql优化 一、存储引擎 1.查看所有引擎 SHOW ENGINES; 2.查看默认存储引擎 show VARIABLES LIKE '%STORAGE_engine%'; 3.MyISAM和InnoDB 对比项 MyISAM InnoDB 主外键 不支持 支持 事务 不支持 支持 行表锁 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 行锁,操作时只锁某一行,不对其他行有影响,适合高并发的操作 缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,对内存的要求较高,而且内存的大小对其性能有决定性的影响 表空间 小 大 关注点 性能 事务 默认安装 YES YES 二、SQL执行加载顺序 From left_table on join_condition <join_type> join right_table where where_condition group by group_condition having having_condition select distinct select_list order by orderBy_condtion limit limit_num 三、索引 1.定义 索引是帮助Mysql高效获取数据的数据结构。——>本质:数据结构。 其目的在于提高查询效率,可以类比于字典,可以简单理解为 排好序的快速查找数据结构 。

day36 学习小结

半世苍凉 提交于 2019-12-03 10:10:25
目录 一、python操作mysql 1. pymysql的安装 2. sql注入问题 3. 连接 4. 增 5. 查 6. 改 7. 删 二、索引 1. 为啥使用索引以及索引的作用 2. 索引的本质 3. 索引的底层原理 4. 索引的种类 5. 索引的创建与删除 5.1 创建主键索引 5.2 删除主键索引 5.3 创建唯一索引 5.4 删除唯一索引 5.5 创建普通索引 5.6 删除普通索引 6. 索引的优缺点 7. 不会命中索引的情况 三、慢查询日志 1. 查看慢sql的相关变量 2. 配置慢sql的变量 一、python操作mysql 1. pymysql的安装 pip install pymysql 2. sql注入问题 产生的原因 因为过于相信用户输入的内容,根本没有做任何的检验 解决的方法 sql = "select * from user where 字段1=%s and 字段2=%s" cursor.execute(sql, (值1, 值2)) 3. 连接 ### 连接数据库的参数 conn=pymysql.connect(host='localhost',user='root',password='123qwe',database='test',charset='utf8') # cursor = conn.cursor() ### 默认返回的值是元祖类型

mysql总复习

喜你入骨 提交于 2019-12-03 10:08:00
目录 数据库操作 库操作 表操作 数据行操作 表关系操作 单表操作 外键创建 多表联查 pymysql模块 索引 主键索引 唯一索引 普通索引 数据库操作 库操作 create database 库名 charset utf8; //创建表 show databases; //查看所有库 show create database 库名; // 查看创建库的语句 select database(); //查看当前的数据库 use 库名; //使用数据库 drop database 库名; //删除库 alter database 库名 charset utf8; //更改库字符编码 表操作 // 创建表 create table t1 ( id int primary key, name varchar(32) ) charset utf8; // 修改表名 alter table t1 rename t11; // 添加字段 alter table 表名 add 字段名 列类型 ; alter table 表名 add 字段名 列类型 first; alter table 表名 add 字段名 列类型 after 字段; // 修改字段名 alter table 表名 change 旧字段名 新字段名 数据类型; //修改字段属性 alter table 表名 modify 字段名

数据库系统(五)---MySQL基础

怎甘沉沦 提交于 2019-12-03 09:37:31
一、SQL基本概念:   SQL 已经成为关系数据库的标准语言,是一种数据库查询和程序设计语言,用 于存取数据以及查询、更新和管理关系数据库系统。 功能不仅仅是查询,还包括数据定义、数据操纵和数据控制等于数据库有关的 一系列功能。   四大功能:数据查询、数据定义、数据操纵和数据控制。   1)嵌入式和动态 SQL 规则 规定了 SQL 语句在高级程序设计语言中使用的规范方法,以便适应较为复杂的 应用。   2)SQL 调用和会话规则 调用包括 SQL 例程和调用规则,以便提高 SQL 的灵活性、有效性、共享性以 及使 SQL 具有更多的高级语言的特征。   3)关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有 数据库模式、表、索引、视图等。 SQL 标准提供的数据定义语句如下表:      二、MySQL 1、MySQL基础概念   MySQL 是一个关系数据库管理系统(RDBMS),它具有客户/服务器体系结构。 MySQL 中的 SQL 作为一种关系型数据库管理系统,遵循 SQL 标准,提供了对数据定义语言 DDL、数据操纵语言 DML、数据控制语言 DCL 的支持,同样支持关系数据库的三级模式结构。 MySQL 中一个关系对应一个基本表,一个或多个基本表对应一个存储文件,一 个表可以有若干索引,索引也存放在存储文件中。   MySQL 在 SQL

1031 笔记

拟墨画扇 提交于 2019-12-03 07:32:51
目录 pymysql 1.基本操作 1.新建表 2.增加数据 3.删除数据 4.更改数据 5.查找数据 6.断开连接 2.sql注入 解决方法 3.创建大数据库 索引 定义 作用 实现原理 B+树的性质 B+树的分类 InnoDB存储引擎表示索引组织表,即表中数据按照主键顺序存放。而聚集索引(clustered index)就是按照每张表的主键构造一棵B+树,同时叶子结点存放的即为整张表的行记录数据,也将聚集索引的叶子结点称为数据页。聚集索引的这个特性决定了索引组织表中数据也是索引的一部分。同B+树数据结构一样,每个数据页都通过一个双向链表来进行链接。 如果未定义主键,MySQL取第一个唯一索引(unique)而且只含非空列(NOT NULL)作为主键,InnoDB使用它作为聚簇索引。 如果没有这样的列,InnoDB就自己产生一个这样的ID值,它有六个字节,而且是隐藏的,使其作为聚簇索引。 由于实际的数据页只能按照一棵B+树进行排序,因此每张表只能拥有一个聚集索引。在多少情况下,查询优化器倾向于采用聚集索引。因为聚集索引能够在B+树索引的叶子节点上直接找到数据。此外由于定义了数据的逻辑顺序,聚集索引能够特别快地访问针对范围值得查询。 索引的种类 主键索引 primary key 唯一索引 unique(name) 唯一联合索引 uniqe (name, email) 普通索引

mysql面试题三

帅比萌擦擦* 提交于 2019-12-03 07:23:44
1、MySQL的复制原理以及流程 (1)、复制基本原理流程 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; (2)、MySQL复制的线程有几个及之间的关联 MySQL 的复制是基于如下 3 个线程的交互( 多线程复制里面应该是 4 类线程): 1. Master 上面的 binlog dump 线程,该线程负责将 master 的 binlog event 传到slave; 2. Slave 上面的 IO 线程,该线程负责接收 Master 传过来的 binlog,并写入 relay log; 3. Slave 上面的 SQL 线程,该线程负责读取 relay log 并执行; 4. 如果是多线程复制,无论是 5.6 库级别的假多线程还是 MariaDB 或者 5.7 的真正的多线程复制, SQL 线程只做 coordinator,只负责把 relay log 中的 binlog读出来然后交给 worker 线程, woker 线程负责具体 binlog event 的执行; (3)

mysql面试题

◇◆丶佛笑我妖孽 提交于 2019-12-03 07:22:57
事务四大特性 原子性:不可分割的操作单元,事务中所有操作,要么全部成功;要么撤回到执行事务之前的状态 一致性:如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的; 隔离性:事务操作之间彼此独立和透明互不影响。事务独立运行。这通常使用锁来实现。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。 持久性:事务一旦提交,其结果就是永久的。即便发生系统故障,也能恢复。 MySQL 的事务隔离级别 未提交读(Read Uncommitted):允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据 提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)。 可重复读(Repeated Read):可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响。 串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 MySQL数据库(InnoDB引擎)默认使用可重复读( Repeatable read) 索引 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE。B