mysql创建索引

mysql(视图 事务 索引 外键)

流过昼夜 提交于 2020-03-07 13:06:19
视图 视图本质就是对查询的封装 创建视图(定义视图 起名以v_开头) create view v_students as select classes.name as c_name ,students.* from students inner join classes on students.cls_id=classes.id; 查看视图 select * from v_students; 删除视图 drop view v_students; 事务 事务具有ACID特性: 原子性(A,atomicity) 一致性(C,consistency) 隔离性(I,isolation) 持久性(D,durabulity) 原子性:事务内所有操作要么都执行,要么都不执行,它是一个不可分割的工作单位 例如: A给B转账,不会因为各种原因A账号已经发生扣款而B账户没有收到加款。 一致性:事务开始和结束前后,数据库的完整性没有被破坏 案例: 对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNT表中aaa和bbb的存款总额为2000元。 隔离性:事务之间不相互影响,多个事务并发访问时,事务之间是隔离的 事务查看数据更新时,数据所处状态要么是另一事务修改之前或者修改之后的状态,不会查看到中间状态的数据。事务1在修改表的时候提交之前事务2不能修改 持久性:事务完成一手

MySql的多存储引擎架构

六眼飞鱼酱① 提交于 2020-03-07 05:26:07
支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一。如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解MySQL的核心基础架构。本文将首先介绍MySQL的整体逻辑架构,然后分析MySQL的存储引擎API并介绍如何编写自己的MySQL存储引擎。 MySQL逻辑架构 MySQL作为一个大型的网络程序、数据管理系统,架构非常复杂。下图大致画出了其逻辑架构。 MySQL由以下几部分组成: 连接池组件。 管理服务和工具组件。 SQL接口组件。 查询分析器组件。 优化器组件。 缓冲(Cache)组件。 插件式存储引擎。 物理文件。 Connectors MySQL首先是一个网络程序,其在TCP之上定义了自己的应用层协议。所以要使用MySQL,我们可以编写代码,跟MySQL Server建立TCP连接,之后按照其定义好的协议进行交互。当然这样比较麻烦,比较方便的办法是调用SDK,比如Native C API、JDBC、PHP等各语言MySQL Connector,或者通过ODBC。但通过SDK来访问MySQL,本质上还是在TCP连接上通过MySQL协议跟MySQL进行交互。 Connection Management 每一个基于TCP的网络服务都需要管理客户端链接,MySQL也不例外。MySQL会为每一个连接绑定一个线程

Mysql之索引

…衆ロ難τιáo~ 提交于 2020-03-07 00:49:54
文章目录 索引 索引原理 索引技巧与注意事项 建立索引的原则 利用索引排序 InnoDB索引模型 联合索引 聚集索引 辅助索引 覆盖索引 索引合并 Cardinality(基数) 查看索引 Cardinality 优化器选择不使用索引的情况 MRR 验证MRR ICP 验证ICP 索引 只有当索引帮助存储引擎快速查找到记录的带来的好处大于其带来的额外工作时,索引才是有效的。对于非常小的表,大部分情况下简单的全表扫描更高效 在一个100w条数据的表中,如果某一列没有添加索引,那么每一句select语句都要随机地逐条扫描100w行数据,每次都要从中寻找0或者更多匹配的行。虽然这些数据最初是按照顺序加载的,但sql也不能理解这种顺序,它必须要处理所有行才能找到匹配的数据。添加索引并不总能自动改善所有类型的SQL查询的性能。有时候执行全表扫描反而更加高效,这取决于所要求的行数。这就是两种不同访问方式的差异,即通过随机IO操作来获取个别行的数据和使用查询索引及有序IO操作来读取所有数据。 索引除了在给定表上限制需要读取的数据外,索引的另一个主要用途就是快捷高效地在相关的表之间做Join操作。在需要Join的列上使用索引可以显著提升性能,并可以在另一个表中快速找到一个匹配的值。 优点 索引大大减少了服务器需要扫描的数据量 索引可以帮助服务器避免排序和临时表 索引可以将随机IO变为顺序IO

数据库优化方案

感情迁移 提交于 2020-03-06 20:02:31
目录 一、 选择合适的存储引擎: InnoDB 1.1 怎样将现有的 MyISAM 数据库转换为 InnoDB: 1.2 为每一个表分别创建 InnoDB FILE: 二、 保证从内存中读取数据。讲数据保存在内存中 2.1 足够大的 innodb_buffer_pool_size 2.1.1 怎样确定 innodb_buffer_pool_size 足够大。数据是从内存读取而不是硬盘? 2.1.2 server上是否有足够内存用来规划 2.2 数据预热 2.3 不要让数据存到 SWAP 中 三、定期优化重建数据库 四、降低磁盘写入操作 4.1 使用足够大的写入缓存 innodb_log_file_size 4.2 innodb_flush_log_at_trx_commit 4.3 避免双写入缓冲 五、提高磁盘读写速度 六、充分使用索引 6.1 查看现有表结构和索引 6.2 加入必要的索引 6.2.1 比方,优化用户验证表: 6.2.2 使用自己主动加索引的框架或者自己主动拆分表结构的框架 七、分析查询日志和慢查询日志 八、激进的方法。使用内存磁盘 九、用 NOSQL 的方式使用 MYSQL 十、其它 MYSQL 应该是最流行了 WEB 后端数据库。WEB 开发语言近期发展非常快,PHP, Ruby, Python, Java 各有特点,尽管 NOSQL 近期越來越多的被提到

PostgreSQL与MySQL对比

强颜欢笑 提交于 2020-03-06 11:59:32
都属于开放源码的一员,性能和功能都在高速地提高和增强。MySQL AB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。 PostgreSQL : 免费 原则: 对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会日益提供。而随着硬件性能的飞速提高,速度也不再是什么太大的问题。 1 架构对比 MySQL: 多线程 PostgreSQL: 多进程 多线程架构和多进程架构之间没有绝对的好坏,例如oracle在unix上是多进程架构,在windows上是多线程架构。 PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单。 pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因) 2 对存储过程[1]及事务的支持能力 1) MySQL对于无事务的MyISAM表,采用表锁定,一个长时间运行的查询很可能会长时间地阻碍对表的更新,而PostgreSQL不存在这样的问题。 2) PostgreSQL支持存储过程

索引失效

我们两清 提交于 2020-03-06 00:05:19
1.有or必全有索引; 2.复合索引未用左列字段; 3.like以%开头; 4.需要类型转换; 5.where中索引列有运算; 6.where中索引列使用了函数; 7.如果mysql觉得全表扫描更快时(数据少); 1. 索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 如果条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),例子中user_id无索引 注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2 对于复合索引,如果不使用前列,后续列也将无法使用,类电话簿。 like查询是以%开头 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引 where 子句里对索引列上有数学运算,用不上索引 where 子句里对有索引列使用函数,用不上索引 如果mysql估计使用全表扫描要比使用索引快,则不使用索引 比如数据量极少的表 什么情况下不推荐使用索引? 数据唯一性差(一个字段的取值只有几种时)的字段不要使用索引 比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。 频繁更新的字段不要使用索引 比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。

MySQL 存储引擎

非 Y 不嫁゛ 提交于 2020-03-05 22:35:28
存储引擎 DBMS使用存储引擎进行数据的创建、查询、更新、删除操作。 不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。 MySQL提供了多种存储引擎,最常见的有3种。 1、MyISAM MySQL5.5之前的默认的存储引擎, 每个MyISAM在磁盘上存储成三个文件,文件名和表名相同,扩展名分别是 (1)frm文件:存储表的定义 (2)MYD文件:存储表中的数据(记录) (3)MYI文件:存储索引。 索引保存的是数据文件的指针 特点 访问速度快(优) 支持全文索引(优)。但基本不使用MySQL的全文索引,全文索引一般都是使用第三方的ElasticSearch,Solr等更加成熟的解决方案。 不支持事务、外键(缺) 默认的锁粒度为表级锁,所以并发度很差(缺),但加锁快,锁冲突较少,不容易发生死锁(优); 对数据的查询缓存只缓存索引,不缓存数据(记录),而且使用的是操作系统本身的缓存。 自动增长列可以是组合主键中的任何一列。设置自动增长列:创建表时,在字段后加auto_increment,默认初始值是1 适用场景 不需要事务 不使用外键 操作以select、insert为主 MyISAM支持三种不同的存储格式 (1)静态表(fixed) 表中不能包含变长字段(比如VARCHAR, BLOB, TEXT),每个记录都是固定的长度

MySQL的SQL语句

☆樱花仙子☆ 提交于 2020-03-05 20:59:01
须知: SQL语言:结构化查询语言,是关系型数据库查询语言的标准,不同的数据库虽然有自己私有扩展,但关键词都支持:(select、update、delete、insert、where) SQL语句分类:像Oracle、MSSQL都是通用的 DDL:数据定义语言(create、alter、drop、rename) DML:数据库维护语言(select、insert、update、delete) DCL:数据库控制语言,权限(Grant、revoke) TCL:事务控制语言(commt、sarepqint):新型的语句 一、数据库增删改查 根据这个表结构以下来操作: select * from user; 基本操作 1.创建数据库 create database name; 2.删除数据库 drop database name; 3.创建一个用户表 create table user(id int,name varchar(30),pass varchar(30)); 4.插入数据 insert into user(id,name,pass) values("1","zhangsan","123"); 5.删除一个表 drop table user; 6.查看表字段 desc table user; 7.查看表数据 select * from user; 8.修改表名 rename

优化数据库

谁都会走 提交于 2020-03-05 16:29:44
1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。 例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。同样的,如果可以的话,我们应该使用MEDIUMINT而不是BIGIN来定义整型字段。 另外一个提高效率的方法是在可能的情况下,应该尽量把字段设置为NOTNULL ,这样在将来执行查询的时候,数据库不用去比较NULL值。 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。 2、使用连接(JOIN)来代替子查询(Sub-Queries) MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询,如下所示:

数据库mysql

半世苍凉 提交于 2020-03-05 16:22:59
内容回顾 day35 # 并发编程 # io操作 : input/output # 阻塞 非阻塞(get_nowait) 同步 异步(start terminate submit map) 并发 并行 # 进程的三状态图 : 阻塞 运行 就绪 # 进程 计算机中最小的资源分配单位 # 进程之间数据隔离\资源不共享 # 可以利用多个CPU # 开启和销毁的开销大 # 由操作系统负责调度 # multiprocessing模块 # Process类 : 开启进程 # 各种操作进程的方法 # 守护进程 : 守护到主进程的代码结束 # IPC : 进程之间通信 # 基于文件Queue Pipe\基于网络 socket 第三方工具 # 进程中的互斥锁 Lock :性能好 # 进程中的递归锁 RLock : 效率低 # 递归锁可以锁多次不会发生死锁 # 线程 # 计算机中能够被操作系统调度的最小单位 # 线程之间资源共享 # 可以利用多核 # 开启和销毁的开销小 # 由操作系统负责调度 # GIL锁 : 全局解释器锁 互斥锁 # 导致了Cpython解释器下 同一个进程下的多个线程 不能利用多核 # 由于垃圾回收机制gc不能在多线程环境下正常进行引用计数 # threading模块 # Thread类 # 开启线程 # 守护线程 : 守护整个主线程的 # 子线程先结束 # 主线程结束 #