• 关于SQL优化


    建立索引常用的规则

    • 表的主键、外键必须有索引;

    • 数据量超过300的表应该有索引;

    • 经常与其他表进行连接的表,在连接字段上应该建立索引;

    • 经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

    • 索引应该建在选择性高的字段上;

    • 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

    • 复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

      A、正确选择复合索引中的主列字段,一般是选择性较好的字段;

      B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;

      C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

      D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;

      E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

    • 频繁进行数据操作的表,不要建立太多的索引;

    • 删除无用的索引,避免对执行计划造成负面影响;

     以上是一些普遍的建立索引时的判断依据。一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。

     因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。

     另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。

    SQL优化

    • 对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

    • 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

    • 应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。

    • 应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描

    • 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描

    • 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

    • 尽量避免大事务操作,提高系统并发能力。

    • 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写

    数据库事务

      事务的四个特性:原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)和持久性(Durabiliy),简称为ACID

    数据索引类型

      根据数据库的功能,可以在数据库设计器中创建四种索引:唯一索引、非唯一索引、主键索引和聚集索引。 尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键或唯一约束。

      唯一索引:

      唯一索引是不允许其中任何两行具有相同索引值的索引。 当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。

      例如,如果在 employee 表中职员的姓 (lname) 上创建了唯一索引,则任何两个员工都不能同姓。

      非唯一索引:

      非唯一索引是相对唯一索引,允许其中任何两行具有相同索引值的索引。 当现有数据中存在重复的键值时,数据库是允许将新创建的索引与表一起保存。这时数据库不能防止添加将在表中创建重复键值的新数据。

      主键索引:

      数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。 在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。

      该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

      聚集索引(也叫聚簇索引):

      在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。

      如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的[数据访问]

  • 相关阅读:
    Eclipse配置Maven私服
    ubuntu下使用Nexus搭建Maven私服
    Ubuntu系统的Redis安装配置
    centos7.6安装dpdk-stable-19.11.10
    微软的分布式应用框架 Dapr Helloworld
    Caddy源码阅读(二)启动流程与 Event 事件通知
    Caddy源码阅读(一)Run详解
    Caddy 源码全解析
    假装前端工程师(一)Icework + GitHub pages 快速构建可自定义迭代开发的 react 网站
    caddy & grpc(3) 为 caddy 添加一个 反向代理插件
  • 原文地址:https://www.cnblogs.com/qq1455453805/p/11655144.html
Copyright © 2020-2023  润新知