mysql创建索引

3. 高级

回眸只為那壹抹淺笑 提交于 2020-01-30 20:06:31
高级 3.1. 关系 3.2. 连接 3.3. 自关联 3.4. 子查询 3.5. 内置函数 3.6. 视图 3.7. 事务 3.8. 索引 简介 实体与实体之间有3种对应关系,这些关系也需要存储下来 在开发中需要对存储的数据进行一些处理,用到内置的一些函数 视图用于完成查询语句的封装 事务可以保证复杂的增删改操作有效 先看个问题 问:查询每个学生每个科目的分数 分析:学生姓名来源于students表,科目名称来源于subjects,分数来源于scores表,怎么将3个表放到一起查询,并将结果显示在同一个结果集中呢? 答:当查询结果来源于多张表时,需要使用连接查询 关键:找到表间的关系,当前的关系是 students表的id---scores表的stuid subjects表的id---scores表的subid 则上面问题的答案是: select students.sname,subjects.stitle,scores.score from scores inner join students on scores.stuid=students.id inner join subjects on scores.subid=subjects.id; 结论:当需要对有关系的多张表进行查询时,需要使用连接join 连接查询 连接查询分类如下: 表A inner join 表B

mysql删除索引

混江龙づ霸主 提交于 2020-01-30 18:55:31
删除索引 删除索引可以使用ALTER TABLE或DROP INDEX语句来实现。DROP INDEX可以在ALTER TABLE内部作为一条语句处理,其格式如下: drop index index_name on table_name ; alter table table_name drop index index_name ; alter table table_name drop primary key ; 其中,在前面的两条语句中,都删除了table_name中的索引index_name。而在最后一条语句中,只在删除PRIMARY KEY索引中使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。 如果从表中删除某列,则索引会受影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。 来源: https://www.cnblogs.com/eternityz/p/12243317.html

mysql添加索引(建表之后)

冷暖自知 提交于 2020-01-30 18:55:11
一.使用ALTER TABLE语句创建索引 语法如下: alter table table_name add index index_name (column_list) ; alter table table_name add unique (column_list) ; alter table table_name add primary key (column_list) ; 其中包括普通索引、UNIQUE索引和PRIMARY KEY索引3种创建索引的格式,table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。索引名index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以同时创建多个索引。 二.使用CREATE INDEX语句对表增加索引 能够增加普通索引和UNIQUE索引两种。其格式如下: create index index_name on table_name (column_list) ; create unique index index_name on table_name (column_list) ; 说明:table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义

mysql在建表语句中添加索引

耗尽温柔 提交于 2020-01-30 18:54:46
普通索引创建 创建普通索引,即不添加 UNIQUE、FULLTEXT 等任何参数。 【例】创建表名为 score 的数据表,并在该表的 id 字段上建立索引,SQL 语句如下: CREATE table score( id int(11) AUTO_INCREMENT primary key not null, name varchar(50) not null, math int(5) not null, English int (5) not null, Chinese int (5) not null, index(id) ); 此时在id字段上建立的普通索引名字为id,在id字段建立的,索引方法为BTREE,索引类型为normal 创建唯一索引 创建唯一索引时,使用 UNIQUE 参数进行约束。 【例】创建表名为 address 的数据表,并在该表的 id 字段上建立唯一索引,SQL 语句如下: CREATE table address( id int(11) auto_increment primary key not null, name varchar(50), address varchar(200), UNIQUE INDEX address(id ASC) ); 此时在id字段上建立的唯一索引,索引名字为address,索引方法BTREE为

MySQL查看SQL语句执行效率

落爺英雄遲暮 提交于 2020-01-30 17:08:04
Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看 SQL 语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。 Explain语法:explain select … from … [where ...] 例如:explain select * from news; 输出: +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ 下面对各个属性进行了解: 1、id:这是SELECT的查询序列号 2、select_type:select_type就是select的类型,可以有以下几种: SIMPLE:简单SELECT(不使用UNION或子查询等) PRIMARY

MySQL查看SQL语句执行效率

六月ゝ 毕业季﹏ 提交于 2020-01-30 17:07:35
Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看 SQL 语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。 Explain语法:explain select … from … [where ...] 例如:explain select * from news; 输出: +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ 下面对各个属性进行了解: 1、id:这是SELECT的查询序列号 2、select_type:select_type就是select的类型,可以有以下几种: SIMPLE:简单SELECT(不使用UNION或子查询等) PRIMARY

你在家快疯了?20 道数据库面试解析学起来

人走茶凉 提交于 2020-01-30 15:49:37
面试的时候,发现数据库方面,忘得一塌糊涂,抽时间整理了一些数据库方面的题。 事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL 默认是哪个级别? MySQL 常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别? MySQL 的 MyISAM 与 InnoDB 两种存储引擎在,事务、锁级别,各自的适用场景? 查询语句不同元素(where、jion、limit、group by、having 等等)执行先后顺序? 什么是临时表,临时表什么时候删除? MySQL B+Tree 索引和 Hash 索引的区别? 聚集索引和非聚集索引区别? 有哪些锁(乐观锁悲观锁),select 时怎么加排它锁? 非关系型数据库和关系型数据库区别,优势比较? 数据库三范式,根据某个场景设计数据表? 数据库的读写分离、主从复制,主从复制分析的 7 个问题? 使用 explain 优化 sql 和索引? MySQL 慢查询怎么解决? 什么是 内连接、外连接、交叉连接、笛卡尔积等? mysql 都有什么锁,死锁判定原理和具体场景,死锁怎么解决? varchar 和 char 的使用场景? mysql 高并发环境解决方案? 数据库崩溃时事务的恢复机制(REDO 日志和 UNDO 日志)? 事务四大特性(ACID)原子性、一致性

初学数据库 事务与索引

狂风中的少年 提交于 2020-01-30 07:33:46
6、事务 要么都成功,要么都失败 1、SQL 执行 A 给 B 转账 A 1000 —>200 B 200 2、SQL 执行 B 收到 A 的钱 A 800 —> B 400 一一一一一一 将一组SQL 放在一个批次中去执行~ 事务原则 : ACID 原则 原子性,一致性,隔离性,持久性 (脏读,幻读….) 参考博客连接 : https://blog.csdn.net/dengjili/article/details/82468576 原子性(Atomicity) 要么都成功,要么都失败 一致性(Consistency) 事务前后的数据完整性要保证一致 ,1000 持久性(Durability)— 事务提交 事务一旦提交则不可逆,被持久化到数据库中! 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作 数据所干扰,多个并发事务之间要相互隔离。 隔离所导致的一些问题 脏读: 指一个事务读取了另外一个事务未提交的数据。 不可重复读: 在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对) 虚读(幻读) 是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。 执行事务 -- ==================== 事务 =========================

170309、MySQL存储引擎MyISAM与InnoDB区别总结整理

谁都会走 提交于 2020-01-30 07:10:16
1、MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。 2、MyISAM与InnoDB存储引擎的主要特点 MyISAM存储引擎的特点是:表级锁、不支持事务和全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发、重负荷生产系统上,表锁结构的特性就显得力不从心; 以下是MySQL 5.7 MyISAM存储引擎的版本特性: InnoDB存储引擎的特点是:行级锁、事务安全(ACID兼容)、支持外键、不支持FULLTEXT类型的索引(5.6.4以后版本开始支持FULLTEXT类型的索引)。InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎。InnoDB是为处理巨大量时拥有最大性能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。 以下是MySQL 5.7 InnoDB存储引擎的版本特性: 注意: InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如 update table set num=1 where name like “a%” 。 两种类型最主要的差别就是InnoDB支持事务处理与外键和行级锁。而MyISAM不支持

数据库优化

隐身守侯 提交于 2020-01-30 06:19:09
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长 应用的日志出现超时等错误 可以使用sar命令,top命令查看当前系统状态。 也可以通过Prometheus、Grafana等监控工具观察系统状态。(感兴趣的可以翻看我之前的文章) SQL语句表象 冗长 执行时间过长 从全表扫描获取数据 执行计划中的rows、cost很大 冗长的SQL都好理解,一段SQL太长阅读性肯定会差,而且出现问题的频率肯定会更高。更进一步判断SQL问题就得从执行计划入手,如下所示: 执行计划告诉我们本次查询走了全表扫描Type=ALL,rows很大(9950400)基本可以判断这是一段"有味道"的SQL。 获取问题SQL 不同数据库有不同的获取方法,以下为目前主流数据库的慢查询SQL获取工具 MySQL 慢查询日志 测试工具loadrunner Percona公司的ptquery等工具 Oracle AWR报告 测试工具loadrunner等 相关内部视图如v 、 、 、 session_wait等 GRID CONTROL监控工具 达梦数据库