最近看了比较多关于MYSQL的内容,特别是在性能优化这一块,今天总结下一些数据库中的规范,当然,不都是绝对的,只是一些规范,如果不遵守,MYSQL也是能正常执行语句,数据库也能正常运行。1 数据库设计1.1数据库和表的字符集统一使用UTF-8最重要的一点就是国际化,UTF-8包含了几乎所有语言需要的字符,并且Unicode是个不断更新的字符集,UTF-8编码在各个操作系统和语言环境当中的支持是非常
1 最左前缀法则如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。show index from tb_user;对于最左前缀法则指的是,查询时,最左边的列,也就是profession必须存在,否则索引全部失效。而且中间不能跳过某一列,否则该列后面的字段索引将失效。接下来,我们来演
1EXPLAIN简介EXPLAIN 命令是查看查询优化器如何决定执行查询的主要方法,使用EXPLAIN,只需要在查询中的SELECT关键字之前增加EXPLAIN这个词即可,MYSQL会在查询上设置一个标记,当执行查询时,这个标记会使其返回关于在执行计划中每一步的信息,而不是执行它,它会返回一行或多行信息,显示出执行计划中的每一部分和执行的次序,从而可以从分析结果中找到查询语句或是表结构的性能瓶颈。
1哈希索引原理哈希索引原理其实就是hash表,搜索时间效率O(1),搜索效率好,也意味着磁盘IO花费少,mysql底层使用的是链式哈希表,结构如下,每一个bucket就是一个个哈希桶,也就是哈希链表的头结点。哈希结构天然的需要耗费空间资源,是一种用空间换时间的做法2哈希要点:解决哈希冲突的几种方式再哈希的参数碰撞因子或者说负载因子说白了就是用的拉链法去解决的哈希冲突,也正是这个结构造成了哈希索引的
1、索引概念我们平时建表的时候都会为表加上主键, 在某些关系数据库中, 如果建表时不指定主键,数据库会拒绝建表的语句执行。 事实上, 一个加了主键的表,并不能被称之为「表」。一个没加主键的表,它的数据无序的放置在磁盘存储器上,一行一行的排列的很整齐, 跟我认知中的「表」很接近。如果给表上了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,也就是上面说的「平衡树」结构,换句话说,就是
1索引的数据结构Mysql的默认存储引擎为InnoDB,而InnoDB使用的数据结构是B+Tree,为什么选用B+Tree,B+Tree相比于其他常见几种数据结构有什么好处呢,这里简单记录一下我的理解。1.1二分查找法在说数据结构之前先看下二分查找法,也称为折半查找法,顾名思义就是每次查找都可以讲查询范围减半。基本思想是:将记录按有序化(递增或递减)排列,在查找过程中采用跳跃式方式查找,即先以有序
1聚簇索引与非聚簇索引1.1.聚簇索引:只能来自于采用innodb存储引擎表的数据mysql自动将采用了innodb存储引擎,作为表中主键建立索引,这个索引就是聚簇索引如果当前表中没有主键,mysql将会选择一个添加唯一性约束的字段作为聚簇索引如果当前表中既没有主键字段,也没有添加唯一性约束字段,mysql将随机选取一个字段来作为聚簇索引在采用innodb存储引擎的表文件中,必然会存在一个聚簇索引
1索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。索引的作用就相当于书的目录。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。索引底层数据结构存在很多种类型,常见的索引结构有: B 树, B+树 和 
1.group by:(最慢) 【原因】:group by 在执行是首先要将临时表中的数据进行排序,然后再进行分组2.order by:【原因】:需要对select生成的临时表中数据行进行一次排序,然后要将排好顺序的数据行组成一个全新的临时表3.where:【原因】:需要对表中的所有的数据行进行遍历,如果当前临时表中的数据行过多的话,导致where执行的效率非常的慢4.limit:【原
MySql查询语句中七个查询命令特征(根据七个查询执行优先级)1.FROM 【作用】:将硬盘上的表文件加载到内存中,生成一个全新的临时表定位内存中已经存在的临时表 【注意】:在一个查询语句中,第一个执行的命令永远都是fromfrom定位的是内存中的一个临时表,这个临时表必须手动指定表名2.WHERE 【作用】:where命令操作的由from命令生
1为什么要学习MySql优化1.避免网站页面出现访问错误2.增加数据库的稳定性3.优化用户的体验2查询过慢的原因 1.有规律速度过慢:可能用户访问量激增 , 可以使用mysql集群处理; 2.无规律速度过慢:可能跟表中数据量的变化有关系,可以使用查询语句优化。3判断查询语句是否需要优化依赖工具 1.慢查询记录 2.explain执行计划 &n
1第一范式数据库表中不能出现重复记录,每个字段是原子性的不能再分1.1不符合第一范式的示例1.2存在问题:最后一条记录和第一条重复(不唯一,没有主键)联系方式字段可以再分,不是原子性的关于第一范式,每一行必须唯一,也就是每个表必须有主键,这是我们数据库设计的最基本要求,主要通常采用数值型或定长字符串表示,关于列不可再分,应该根据具体的情况来决定。如联系方式,为了开发上的便利行可能就采用一个字段了。
1新建用户CREATE USER username IDENTIFIED BY 'password';说明:username——你将创建的用户名, password——该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.例如:create user hahaha identified by '123456';--可以登录但是只可以看见一个库 information
1什么是视图视图是一种根据查询(也就是SELECT 表达式)定义的数据库对象,用于获取想要看到和使用的局部数据。 视图有时也被成为“虚拟表”。 视图可以被用来从常规表(称为“基表”)或其他视图中查询数据。相对于从基表中直接获取数据,视图有以下好处:访问数据变得简单可被用来对不同用户显示不同的表的内容用来协助适配表的结构以适应前端现有的应用程序视图作用:提高检索效率隐藏表的实现细节【面向视图检索】2
1、索引原理索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始,然后读完整个表直到它找出相关的行。表越大,花费时间越多。对于一个有序字段,可以运用二分查找(Binary Search),这就是为什么性能能得到本质上的提高。MYISAM和INNODB都是用B+Tree作为索引结构。(主键,unique 都会默认的添加索引)2、索引的应用2.1创建索引如果未使用
1、创建表2、查询表中数据3、开启事务START TRANSACTION;4、插入数据5、查看数据6、修改数据7、查看数据8、回滚事务9、查看数据10、自动提交模式自动提交模式用于决定新事务如何及何时启动。10.1启用自动提交模式:如果自动提交模式被启用,则单条DML语句将缺省地开始一个新的事务。如果该语句执行成功,事务将自动提交,并永久地保存该语句的执行结果。如果语句执行失败,事务将自动回滚,并
1、设置服务器缺省隔离级别1.1通过修改配置文件设置可以在my.ini文件中使用transaction-isolation选项来设置服务器的缺省事务隔离级别。该选项值可以是:READ-UNCOMMITTEDREAD-COMMITTEDREPEATABLE-READSERIALIZABLE例如:[mysqld]transaction-isolation = READ-COMMITTED1.2通过命令
1隔离级别事务的隔离级别决定了事务之间可见的级别。当多个客户端并发地访问同一个表时,可能出现下面的一致性问题:1.1脏读(Dirty Read) 一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交,这就出现了脏读取。1.2不可重复读(Non-repeatable Read) 在同一个事务中,同一个读操作对同一个数据的前后两次读取产生了不同的结果,这就是不可重复读。1.3
1、事务概述事务可以保证多个操作原子性,要么全成功,要么全失败。对于数据库来说事务保证批量的DML要么全成功,要么全失败。2、事务具有四个特征ACID原子性(Atomicity) :整个事务中的所有操作,必须作为一个单元全部完成(或全部取消)。一致性(Consistency):在事务开始之前与结束之后,数据库都保持一致状态。隔离性(Isolation) :一个事务不会影响其他事务的运
1存储引擎1.1存储引擎的使用数据库中的各表均被(在创建表时)指定的存储引擎来处理。服务器可用的引擎依赖于以下因素:MySQL的版本服务器在开发时如何被配置启动选项为了解当前服务器中有哪些存储引擎可用,可使用SHOW ENGINES语句: mysql> SHOW ENGINES\G1.2在创建表时,可使用ENGINE选项为CREATE TABLE语句显式指定存储引擎
外键(foreign key)主要是维护表之间的关系的,主要是为了保证参照完整性,如果表中的某个字段为外键字段,那么该字段的值必须来源于参照的表的主键,如:emp中的deptno值必须来源于dept表中的deptno字段值。举例:建立学生和班级表之间的连接1.首先建立班级表t_classes2.在t_student中加入外键约束3.向t_student中加入数据出现错误,因为在班级表中
每个表应该具有主键,主键可以标识记录的唯一性。primary key 的字段既不能为空,也不能重复。主键分为单一主键和复合(联合)主键,单一主键是由一个字段构成的,复合(联合)主键是由多个字段构成的。1、创建学生id为主键的表create table student(student_id INT(10) PRIMARY KEY,student_name VARCHAR(20) NOT
1、唯一性约束(unique),它可以使某个字段的值不能重复。如:email不能重复1.1创建一个email不重复的表1.2查看表结构 desc t_student;1.3插入一条数据insert into t_student (student_id,student_name,sex,birthday,email,classes_id) values(1001,'zhangsan','m','19
1、非空约束,针对某个字段设置其值不为空,如:学生的姓名不能为空drop table if exists t_student;create table t_student(student_id int(10),student_name varchar(20) not null,sex char(2) default 'm',birthday date,emai
1、什么是约束?在创建表得时候,可以给表得字段添加相应得约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。2、常见的约束有哪些?非空约束(not null): 约束的字段不能为NULL唯一约束(unique): 约束的字段不能重复主键约束(primary key): 约束的字段既不能为NULL,也不能重复(简称PK)外键约束(foreign key): ....(简称FK)检查约束(
采用alter table来增加/删除/修改表结构,不影响表中的数据1、添加字段如:需求发生改变,需要向emp1表中加入联系电话字段,字段名称为:contatct_tel 类型为varchar(40)alter table emp1 add contact_tel varchar(40);2、修改字段如:contact_tel 无法满足需求,长度需要更改为100alter table
1、数据库Update可以修改数据,可以根据条件修改数据(1)语法格式:update 表名 set 字段名称1=需要修改的值1, 字段名称2=需要修改的值2 where ……. (2)举例:将job为manager的员工的工资上涨10%update emp1 set sal=sal+sal*0.1 where job='MANAGER';
1 insert添加、修改和删出都属于DML,主要包含的语句:insert、update、delete1.1 insert语法格式insert into 表名(字段,.......) values(值,………..)1.2 省略字段的插入insert into emp values(9999,'zhangsan','MANAGER', null, null,3000, 500, 10);不建议使用此
1、语法格式create table tableName( columnName dataType(length), ……………….. columnName dataType(length));set character_set_results='gbk';show variables like '%char%';创建表的时候,表中有字段,每一个字段有:
MySQL提供了limit ,主要用于提取前几条或者中间某几行数据select * from table limit m,n其中m是指记录开始的index,从0开始,表示第一条记录n是指从第m+1条开始,取n条。select * from tablename limit 2,4即取出第3条至第6条,4条记录1例:取得前5条数据2例:从第二条开始取两条数据3例:取得薪水最高的前5名
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号