美文网首页笑笑酱数据分析
MySQL优化数据库的方法

MySQL优化数据库的方法

作者: Aedda | 来源:发表于2019-07-16 16:59 被阅读0次
    • 第一,选取最适用的字段属性,MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。

    • 第二,使用连接(JOIN)来代替子查询(SubQueries),MySQL从4.1开始支持SQL的子查询。这个技术可以使用 SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。例如,我们要将客户基本信息表中没有任何订单的客户删除掉,就可以利用子查询先从销售信息表中将所有发出订单的客户ID取出来,然后将结果传递给主查询。

    • 第三,使用联合(UNION)来代替手动创建的临时表,MySQL从4.0的版本开始支持union查询,它可以把需要使用临时表的两条或更多的select查询合并的一个查询中。在客户端的查询会话结束的时候,临时表会被自动删除,从而保证数据库整齐、高效。使用union来创建查询的时候,我们只需要用UNION作为关键字把多个select语句连接起来就可以了,要注意的是所有select语句中的字段数目要想同。

    • 第四,事务,尽管我们可以使用子查询(SubQueries)、连接(JOIN)和联合(UNION)来创建各种各样的查询,但不是所有的数据库操作都可以只用一条或少数几条SQL语句就可以完成的。更多的时候是需要用到一系列的语句来完成某种工作。但是在这种情况下,当这个语句块中的某一条语句运行出错的时候,整个语句块的操作就会变得不确定起来。设想一下,要把某个数据同时插入两个相关联的表中,可能会出现这样的情况:第一个表中成功 更新后,数据库突然出现意外状况,造成第二个表中的操作没有完成,这样,就会造成数据的不完整,甚至会破坏数据库中的数据。要避免这种情况,就应该使用事务,它的作用是:要么语句块中每条语句都操作成功,要么都失败。换句话说,就是可以保持数据库中数据的一致性和完整性。事物以BEGIN关键字开始,COMMIT关键字结束。在这之间的一条SQL操作失败,那么,ROLLBACK命令就可以把数据库恢复到BEGIN开始之前的状态。

    • 第五,锁定表,尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。由于在事务执行的过程中,数据库将会被锁定,因此其它的用户请求只能暂时等待直到该事务结束。如果一个数据库系统只有少数几个用户来使用,事务造成的影响不会成为一个太大的问题;但假设有成千上万的用户同时访问一个数据库系统,例如访问一个电子商务网站,就会产生比较严重的响应延迟。

    • 第六,使用外键,锁定表的方法可以维护数据的完整性,但是它却不能保证数据的关联性。这个时候我们就可以使用外键。

    • 第七,使用索引,索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行。一般说来,索引应建立在那些将用于JOIN,WHERE判断和ORDERBY排序的字段上。尽量不要对数据库中某个含有大量重复的值的字段建立索引。对于一个ENUM类型的字段来说,出现大量重复值是很有可能的情况。

    • 第八,优化的查询语句,绝大多数情况下,使用索引可以提高查询的速度,但如果SQL语句使用不恰当的话,索引将无法发挥它应有的作用。

    数据库三大规范式?

    • 第1范式:每个表中都有1列,并且该列是不可拆分的最小单元
    • 第2范式:1张表只描述一件事情
    • 第3范式:用外键做表的关联

    数据库事务?

    事务:指作为单个逻辑工作单元执行的一系列操作,要么全执行要么全不执行

     事务四个特性(ACID):
      原子性
      一致性
      隔离性
      持久性
    
      事务放到我们的业务逻辑中来处理,不能等到数据库那一关。
    
      事务的并发:
    
    �       可以提高服务器资源利用的
    
            造成的问题:脏读,幻读,不可重复,读丢失更新
    
            解决事务并发产生的问题:
    
            设定隔离级别
    
            四个级别:读取未提交,读取已提交(推荐设置这个级别),可重复读,串行化,四个级别从上往下越来越高的
    
            使用场景:主要是对于数据库有副作用的一些操作。也就是增删改的操作。
    
    
    

    什么是视图?

    从一个或几个基本表(或视图)中导出的虚拟的表。在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
    

    什么是约束?

    约束是在表中定义的用于维护数据库完整性的一些规则
    
    通过为表中的列定义约束可以防止将错误的数据插入表中,也可以保持表之间数据的一致性
    
    若某个约束条件只作用于单独的列,可以将其定义为列约束也可定义为表约束;
    
    若某个约束条件作用域多个列,则必须定义为表约束
    
    表约束通常放在最后一个列定义的后面
    
    

    什么是索引?

    索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
    
    

    什么是序列化?

    序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程
    
    

    什么是触发器?

    触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,是一种特殊类型的存储过程,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发。
    
    

    什么是存储过程?

    存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
    
    

    什么是物化视图?

    物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照(类似于MSSQL Server中的snapshot,静态快照)。对于复制,物化视图允许你在本地维护远程数据的副本,这些副本是只读的。如果你想修改本地副本,必须用高级复制的功能。当你想从一个表或视图中抽取数据时,你可以用从物化视图中抽取。对于数据仓库,创建的物化视图通常情况下是聚合视图,单一表聚合视图和连接视图。(这个是基于本地的基表或者视图的聚合)。物化视图,说白了,就是物理表,只不过这张表通过oracle的内部机制可以定期更新,将一些大的耗时的表连接用物化视图实现,会提高查询的效率。当然要打开查询重写选项;
    
    

    什么是视图?

    视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。
    但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
    
    

    什么是分区表?

    分区表是将大表的数据分成称为分区的许多小的子集,类型有FAT32,NTFST32,NTFS。另外,分区表的种类划分主要有:range,list,和hash分区。划分依据主要是根据其表内部属性。
    同时,分区表可以创建其独特的分区索引。倘若硬盘丢失了分区表,数据就无法按顺序读取和写入,导致无法操作。
    

    什么是笛卡尔乘积?

    笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员 [1]  。
    
    

    什么是数据表?

    数据表有两种含义,一是指数据库最重要的组成部分之一,二是指电子元件,电子芯片等的数据手册(datasheet)。
    
    数据表一般为产品或资料提供一个详细具体的数据资料,方便人们使用和工作时能够清楚方便的获得相应的数据信息。
    

    内连接和外连接的区别?

    1、内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现
    
    2、外连接: 包括
    
    (1)左外连接(左边的表不加限制)
    
    (2)右外连接(右边的表不加限制)
    
    (3)全外连接(左右两表都不加限制)
    
    

    union和union all的区别?

    union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
    
    

    什么情况会遇到 单行子查询返回多行 的错误提示?

    查询出来多于一个值,条件判断的话必须用单个值才行
    
    • 假设有一个池塘,里面有无穷多的水。现有2个空水壶,容积分别为5开和6升,查上没有刻度标识。问题是如何只用这2个水壶从池塘里取得3升的水。
    1. 先用5升的水壶装满水,倒入六升的水壶中.六升的水壶中还空出 一升水体积.
    2. 再用把盛五升水水壶装满水,倒入容积六升的水壶中,壶中还剩4升水.
    3. 把容积六升水中的水倒掉,再把容积五升的水壶倒满水,把这些水倒入容积六升的壶中,容积五升的水壶中这时刚好剩下三升水.
    • 在哥哥和妹妹面前的桌子的抽屉里有16张扑克牌:
      黑桃K、9
      梅花K、Q、6
      红桃A、Q、9、6、4
      方块J、8、6、2、7、3
      隔壁王权叔从这16张牌中挑出张牌来, 并把这张牌的点数告诉哥哥,把这张牌的花色告诉妹妹。这时,王叔叔问:你们能从已知的点数或花色中推知这张牌是什么牌吗?哥哥:我不知道这张牌,
      妹妹:我知道你不知道这张牌。哥哥:现在我知道这张牌了。妹妹:我也知道了。
      请问:这张牌是什么牌?写出推理过程。

    相关文章

      网友评论

        本文标题:MySQL优化数据库的方法

        本文链接:https://www.haomeiwen.com/subject/cubtlctx.html