认识索引(摘录)

1、数据库中存储数据的基础单位就是页,数据库的页大小和操作系统类似,是指存放数据时,每一块的大小。比如一个1M的数据存放在数据库中时, 需要大概12块页来存放。如果是在操作系统上安装的数据库,最好将数据库页大小设置为操作系统页大小的倍数,才是最佳设置。数据库可以将数据从逻辑上分成页,磁盘的I/O操作就是在页级执行。

2、数据库页类型主要分如下三类:

  • 数据页
  • 大型对象数据类型
  • 索引页

(大型对象数据类型,比如text,image,nvarchar(max)等。)

3、一个区包含8个页,它是管理空间的单位,分为如下两类

  • 统一区,由单个对象所有。
  • 混合区,最多可由八个对象共享。

4、非聚集索引与聚集索引之间的显著差别在于以下两点:

  • 基础表的数据行不按非聚集键的顺序排序和存储。
  • 非聚集索引的叶层是由索引页而不是由数据页组成。

  索引的优点:正确的索引会大大提高数据查询,对结果进行排序、分组的操作效率。
    索引的缺点:

  1. 创建索引需要额外的磁盘空间,索引最大一般为表大小的1.2倍左右。
  2. 在表数据修改时,例如增加,删除,更新,都需要维护索引表,这是需要系统开销的。
  3. 不合理的索引设计非但不能利于系统,反而会使系统性能下降。例如我们在一个创建有非聚集索引的列上做范围查询,此列的索引不会起到任何的优化效果,反而由于数据的修改而需要维护索引表,从而影响了对数据修改的性能。

    什么字段不适合创建索引?

  1. 不经常使用的列,这种索引带来缺点远大于带来的优点。
  2. 逻辑性的字段,例如性别字段等等,匹配的记录太多,和全表扫描比起来差不多。
  3. 字段内容特别大的字段,例如大字段等,这会大大增大索引所占用的空间以及索引维护时的速度。
  4. 涉及到计算的列,或者是需要利用数据库函数进行加工处理的列不应当创建索引。

联合索引:

  1. 查询条件中出现联合索引第一列,或者全部,则能利用联合索引.
  2. 条件列中只要条件相连在一起,无论前后,都会利用上联合索引.
  3. 查询条件中没有出现联合索引的第一列,而出现联合索引的第二列,或者第三列,都不会利用联合索引查询.

单一列索引:

  只要条件列中出现索引列,无论在什么位置,都能利用索引查询.

时间: 2024-10-25 11:41:02

认识索引(摘录)的相关文章

闲谈SQL脚本优化

摘要: 闲来无事,便想寻找大师级别优化SQL脚本案例,也算是读后留点笔记,摘录内容都会链接到所参考网址,如有冒犯,还望博主见谅:有些文章只有多动手多动脑才能理解其中的意思,看了需要实际操作,才不枉大师们的良苦用心: 一.正确的建立索引 [摘录:我是如何在SQLServer中处理每天四亿三千万记录的] 首先,我们需要明白几个索引的要点: 索引之后,按索引字段重复最少的来排序,会达到最优的效果.以我们的表来说,如果建立了No的聚集索引,把No放在where子句的第一位是最佳的,其次是Id,然后是Mg

SQL2008R2的 遍历所有表更新统计信息 和 索引重建

---------------------------------------------- [2.以下是更新统计信息] DECLARE UpdateStatisticsTables CURSOR READ_ONLY FOR SELECT sst.name, Schema_name(sst.schema_id) FROM sys.tables sst WHERE sst.TYPE = 'U' DECLARE @name VARCHAR(80), @schema VARCHAR(40) OPEN

B树在数据库索引中的应用剖析(转载)

引言 关于数据库索引,随便Google一个Oracle index,Mysql index总有大量的结果出来,其中不乏某某索引之n条经典建议.笔者认为,较之借鉴,在搞清楚了自己的需求的基础上,对备选方案的原理有个尽可能深入全面的了解会更有利于我们的选择和决策.因为某种方案或者技术呈现出某种优势(包括可能没有被介绍到但一定存在的限制),不是定义出来的,而是因为其实现机制决定的.就像LinkedList和ArrayList分别适用于什么应用不是Document里面定义的,是由其本身的结构决定的.数据

Mysql学习笔记(四)聊聊数据库索引

小心情(可直接跳到分割线后) 今天心情好些了.一些浓的化不开的坏情绪,也渐渐的在晚上解决掉一个复杂的逻辑问题后,渐渐消散了. 今天中午去吃饭的时候,坤哥漫不经心的说:'我这么多年终于悟出了一个道理,人年轻的时候不要那么拼命,都没有时间做其他事情了' 我问什么其他事情,坤哥看了我一眼,又继续漫不经心的说,那么忙,都没有时间谈恋爱了. 我想不那么拼命可以嘛?房价每年都涨,生活的成本与日俱增.如果不努力让自己的价值所赚取的金钱,超过经济增速.那么只能继续成为一个社会底层的loser,继续在青春的美好时

WebDriver元素查找方法摘录与总结

WebDriver元素查找方法摘录与总结 整理By:果冻迪迪 selenium-webdriver提供了强大的元素定位方法,支持以下三种方法. ? 单个对象的定位方法 ? 多个对象的定位方法 ? 层级定位 定位单个元素 在定位单个元素时,selenium-webdriver提示了如下一些方法对元素进行定位. By.className(className)) By.cssSelector(selector) By.id(id) By.linkText(linkText) By.name(name)

C#初学之索引器(Indexer)

注意:以下大部分内容为网上资料或其他朋友的博客摘录 本人初学.net,希望前辈们多多指教和交流 索引器(Indexer)是C#引入的一个新型的类成员,它使得类中的对象可以像数组那样方便.直观的被引用. 索引器非常类似于属性,但索引器包含索引参数(放在 [ ] 内),而且索引器是无名称的(由于 this 被索引,因此在声明中使用的“名称”为 this),且只能作用在实例对象上,而不能在类上直接作用.定义了索引器的类可以让您像访问数组一样的使用 [ ] 运算符访问类的成员. 下面给出一个例子: 请看

<摘录>Fedora添加国内源和本地源

fedora的软件源信息文件(*.repo)都是放在 /etc/yum.repos.d 目录下的.可以通过#ls -l /etc/yum.repos.d 查看,因为默认的软件源都是国外的,可能网速不是很快,我们可以自己添加国内软件源和本地软件源. 1.添加国内软件源 #cd /etc/yum.repos.d #wget http://mirrors.163.com/.help/fedora-163.repo #wget http://mirrors.163.com/.help/fedora-up

python--12、索引知识

MySQL索引及优化 影响性能的因素 需求:一个论坛帖子总量的统计,附加要求:实时更新.从功能上来看非常容易实现,执行一条 SELECT COUNT(*) from 表名 的 Query 就可以得到结果.但是,如果我们采用不是 MyISAM 存储引擎,而是使用的 Innodb 的存储引擎,那么大家可以试想一下,如果存放帖子的表中已经有上千万的帖子的时候,执行这条 Query 语句不可能在 10 秒之内完成一次查询吧 注:没有 where 的 count(*)使用 MyISAM 要比 InnoDB

MySQL 索引条件下推 Index Condition Pushdown

MySQL 索引条件下推 Index Condition Pushdown 出现在MySQL5.6及之后的版本中,能大幅提升查询效率,原因如下: 内容摘录自<深入理解MariaDB和MySQL> 下面使实验,使用官方提供的employees 测试数据库演示. > use employees ; > show create table employees \G ***************************[ 1. row ]*************************