数据库索引、优化

参考地址:

如何看MS SQLSERVER数据库的执行计划https://blog.csdn.net/luoyanqing119/article/details/17022649

聚集索引和非聚集索引https://www.cnblogs.com/aspnethot/articles/1504082.html

数据库SQL优化大总结之 百万级数据库优化方案https://www.cnblogs.com/yunfeifei/p/3850440.html

数据库优化之程序操作优化https://www.cnblogs.com/AK2012/archive/2012/12/28/2012-122803.html

上图中,数据库执行一个T-SQL发生的事,了解一下数据库的构成以及功能。

执行计划:

  可以缓存,存储过程/参数化查询

  select * from User where id=1

  select * from User where id=2

  select * from User where [email protected]

数据是什么?

  数据库就是把东西有序放好,还能随时找到的一个工具。应用程序,有序的数据管理,数据在硬盘上(持久化,唯一的,多线程操作需要加锁,速度慢,可以SSD加快速度)。char nvarchar字段最长是8kb。

聚集索引

  举个例子,在图书馆中,就是书多。图书馆是怎么分类的呢?文学、武侠、IT.....每个类别还有很多书啊,就按照首字母排序。新华字典文字都是按照字母排序的。聚集索引也叫聚簇索引,把数据有序的拜访,物理排序,找字母a开头,找时间范围的。。。

  SQLserver自增int,默认聚集索引,所以查询不排序,就是Id排序。换聚集索引很耗时,很多的硬盘操作,生产环境需要谨慎。聚集索引只有一个,但是生成聚集索引的可以有多个列。一般是自增主键/创建时间/价格。因为数据物理排序了,所以查询快,非常适合大于、小于、between order by。

  聚集索引速度大于非聚集索引

非聚集索引

  在新华字典中,偏旁部首查找汉子---找页码----看详情。图书馆电子查找,输入名字---楼层----书架---层。

  特点:重复存储值和路径,体积小一些,所以查找快一些,快速定位,直达目标。不影响数据的物理排序,但是会重复存储一个数据和位置。

  找数据:先找索引----快速定位-----拿到数据,查找快,但是有维护的索引的成本,请小心。

  非聚集索引可以有很多个,好像最多个255个,每个索引也可以有很多个字段,建议索引不要超过10个。适合经常查询的字段。非聚集索引不能运算,不能like‘% %‘,也不能where Id-1>10。like ‘a%‘这个是可以用非聚集索引的。

建议索引的原则/建议:

  1、主键是必须建立索引的(推荐数值主键,性能最高)

  2、外键也要索引,join能提升性能

  3、经常查询的字段建立索引

  4、经常在where里面的也要建立索引

  5、order by 、group by、distinct

  6、聚合运算/where条件时,先索引字段

不需要建立索引的:

  1、基本不怎么查询的

  2、重复值比较伛的

  3、text/image不要索引

  4、索引不要太多了

还有其他的索引,主XML索引、辅助XML索引、空间索引、非聚集Columnstore索引(数量超过千万的时间建立的索引,先出的一个东西吧)

  执行计划:

    提交SQL语句,数据库查询优化器,经过分析生成,指定多个查询方式,从中算则使用资源最少的,数控制定执行计划是按照使用资源最少,而不是时间最短。

    1、Table Scan 全表扫描性能最差
    2、Cluster Index Scan (聚集索引的扫描) 性能最差,同上,虽然有聚集索引,其实也是全表扫描
    3、Index Seek(NonClustered)(索引查找) 性能非常高
    4、Index Scan 先Index 再扫描
    5、Cluster Index Seek 性能最高

常规的SQL优化建议

  1、对列的计算,任何形式都要避免

  2、in 查询 or 查询索引会失效,可能是拆分

  3、in 换 exists,not in 不要用,完全不走索引

  4、is null 和 is not null都不走索引,索引里面不保存null的

  5、<>这种也不走索引,可以拆分成< 和 >

  6、join时,连接越少,性能越高。左连接,以左边的表结果为主;右连接,反过来;连接字段要求带做引

当数据库梁达到上亿之后,索引用处就不大了,SQLserver数据库,两千万就可以了。当数据量过大,就应该从数据库设计层次找问题了。

原文地址:https://www.cnblogs.com/taotaozhuanyong/p/11563906.html

时间: 2024-08-30 00:36:21

数据库索引、优化的相关文章

数据库索引优化。

数据库索引 大意指的是 : 查询最小结果集:更精确:搜索范围越小就越优化:减少回表数据大小: 尽可能 第一次走索引那一列的时候,取到最小的一个结果集,结果集越小,后面额回表数据就越小.系统性能就越高. 关系数据模型,二叉树

【SQLSERVER】数据库索引维护/优化

好几个月没更新博客了,一方面是因为换工作和搬家的原因,比较忙:另一方面是因为觉得对数据库的理解还不够深刻,花了些时间在学习上. 最近到新公司后,做了些数据库索引优化和维护上的工作,趁着今天有空,写个博客与大家分享下,其实一些源码也是网上拷贝的,只不过是做了些改进,主要想分享的是一个优化的思路. 一.索引的利弊   优点: 1.大大加快数据的检索速度: 2.创建唯一性索引,保证数据库表中每一行数据的唯一性: 3.加速表和表之间的连接: 4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组

(转引)数据库索引(MySQL)

数据结构和算法基础 索引的本质:数据结构,帮助高效获取数据 数据库的查询:最基本的查询算法当然是顺序查找(linear search).二分查找(binary search).二叉树查找(binary tree search)每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,

数据库性能优化一:SQL索引一步到位

SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间 下面举两个简单的例子: 图书馆的例子:一个图书馆那么多书,怎么管理呢?建立一个字母开头的目录,例如:a开头的书,在第一排,b开头的在第二排,这样在找什么书就好说了,这个就是一个聚集索引,可是很多人借书找某某

SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一)

SQL索引一步到位(此文章为“数据库性能优化二:数据库表优化”附属文章之一) SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开他的神秘面纱. 1.1 什么是索引? SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间 下面举两个简单的例子: 图书馆的例子:一个图书馆那么多书,怎么管理呢?建立一个字母开头的目录,例如:a开头的书,在第一排,b开头

数据库索引以及优化

什么是索引? 索引用来快速地寻找那些具有特定值的记录. 索引是加速查询主要手段,索引是快速定位数据的技术. 索引是一种特殊的文件(innoDB(事务性数据库的首选引擎)数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针. 索引:一种特殊的目录,聚集索引和非聚集索引 聚集索引:如同字典中按照字母查询,我们把这种正文内容本身就是一种按照一定规则排列的目录称为聚集引. 非聚集索引:如同字典中按照偏旁来查询某个字,我们把这种目录纯粹是目录,正文纯粹是正文的排序. 主键就是聚集

数据库-----&gt;数据库索引-----&gt;所以原理以及如何设计并优化索引

1.数据库索引原理: 参见博客 2.如何设计数据库索引以及优化数据库索引: 参见博客

MySQL 数据库性能优化之索引优化

这是 MySQL数据库性能优化专题 系列的第三篇文章:MySQL 数据库性能优化之索引优化 索引为什么能提高数据访问性能? 很多人只知道索引能够提高数据库的性能,但并不是特别了解其原理,其实我们可以用一个生活中的示例来理解. 我们让一位不太懂计算机的朋友去图书馆确认一本叫做<MySQL性能调优与架构设计>的书是否在藏,这样对他说:"请帮我借一本计算机类的数据库书籍,是属于 MySQL 数据库范畴的,叫做<MySQL性能调优与架构设计>".朋友会根据所属类别,前往

MS SqlSever一千万条以上记录分页数据库优化经验总结【索引优化 + 代码优化】[转]

对普通开发人员来说经常能接触到上千万条数据优化的机会也不是很多,这里还是要感谢公司提供了这样的一个环境,而且公司让我来做优化工作.当数据库中的记录不超过10万条时,很难分辨出开发人员的水平有多高,当数据库中的记录条数超过1000万条后,还是蛮能考验开发人员的综合技术能力. 当然不是每个公司都能请得起专业的DBA,话又说过来专业的DBA也未必能来我们公司长期工作,这就不只是薪资待遇问题了还会涉及到人家的长期发展规划了,当然我也不是专业的DBA,本着能把问题解决好就是好猫的理念. 我们先看图,数据库

mysql数据库性能优化(包括SQL,表结构,索引,缓存)

优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段.降低 CPU 计算除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了.order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算).当我们的 IO 优化做到一定阶段之后