首页 > 编程知识 正文

数据库4种索引类型,数据库调优面试题

时间:2023-05-05 14:30:47 阅读:9668 作者:1466

1、zzdxhd的基础实现原理及优化

因为b树,优化的b树主要在所有叶节点上添加指向下一个叶节点的指针,所以InnoDB建议在大多数表中使用默认的自增长主键作为主zzdxhd。

3、设有zzdxhd但不能使用时

以“%”开头的LIKE语句在模糊匹配OR语句前后隐式转换,而不同时使用zzdxhd数据类型。 例如,如果varchar没有单引号,它可能会自动转换为int类型。

4、简述在mysql中,zzdxhd、主键、唯一zzdxhd、联合zzdxhd的差异,会对数据库的性能产生什么样的影响(

zdxhd是一个特殊文件,其中InnoDB数据表的zzdxhd是表空间的一部分,包含对数据表中所有记录的引用指针。

常规zzdxhd (由关键字KEY或INDEX定义的zzdxhd )的唯一任务是加快数据访问。

在常规zzdxhd中,zzdxhd数据列可以包含重复的值。 如果确定一个数据列只包含不同的值,则在为该数据列创建zzdxhd时必须使用关键字UNIQUE将其定义为唯一的zzdxhd。 也就是说,唯一的zzdxhd保证了数据记录的唯一性。

主键是唯一可以在一个表中定义的zzdxhd。 主键用于唯一标识单个记录,并使用关键字PRIMARY KEY创建。

zdxhd可以像索引(columnB,columnB ) zzdxhd一样覆盖多个数据列。 这就是联合zzdxhd。

zdxhd可以大大提高数据查询速度,但在执行这些写入操作时也会处理zzdxhd文件,从而降低了插入、删除和更新表的速度。

5、zzdxhd是关系数据库的一个相当重要的概念。 请回答关于zzdxhd的几个问题。

a )、zzdxhd的目的是什么?

快速访问数据表中的特定信息,减少搜索时间

创建唯一性zzdxhd以确保数据库表中每行的数据的唯一性。

加快桌子和桌子之间的连接

使用分组和排序子句进行数据搜索可以大大减少在查询中分组和排序所需的时间

b )、zzdxhd对数据库系统的负面影响是什么?

负面影响:

创建zzdxhd和维护zzdxhd需要很长时间,该时间会随着数据量的增加而增加。 zdxhd需要物理空间。 除了表,每个zzdxhd还需要物理空间。 添加、删除、修改和修改表时,zzdxhd也必须动态维护,这会降低数据维护速度。

c )、为数据表创建zzdxhd的原则是什么?

在最常用于缩小查询范围的字段中创建zzdxhd。

在需要频繁排序的字段中创建zzdxhd

d )、什么情况下不应该做zzdxhd?

对于与查询关系不大或重复值较多的列,请不要创建zzdxhd。

请勿使用特殊数据类型(如文本字段(text ) )创建zzdxhd

6、怎么看表中定义的所有zzdxhd?

zzdxhd是通过以下方式为表定义的:

SHOW INDEX FROM tablename;

7、实现zzdxhd的方式? zzdxhd的原理是什么? zzdxhd的代价是什么? zzdxhd的类型?

要实现zzdxhd,您可以为单个表中的某些字段创建特定的zzdxhd,例如oracle: create index zzdxhd名称on表名(字段名)。 如果在创建表时在字段中设置主键或唯一约束,则会自动设置zzdxhd。

zdxhd原理:根据创建zzdxhd的字段创建zzdxhd表,并存储字段值和相应记录的物理地址。 这允许您在搜索时根据字段值搜索对zzdxhd表物理地址的直接访问记录。

zzdxhd的引入虽然提高了搜索速度,但本身占用了一定的系统存储容量和系统处理时间,需要根据实际情况进行具体分析。

zdxhd的类型是b树zzdxhd、位图zzdxhd、函数zzdxhd等。

8、集群zzdxhd和普通zzdxhd在不同的SQL语句中哪个效率更高? (集群zzdxhd和普通zzdxhd的区别)

概念类:

聚合函数? 会话的定义和使用方法? Oracle存储过程? 什么是构造函数?

9、制定zzdxhd、zzdxhd使用原则有哪些利弊

创建标准zzdxhd :创建索引zzdxhd名称ON表名(列名) TABLESPACE表空间名称;

创建唯一的zzdxhd : createuniqueindexzdxhd名称ON表名(列名) TABLESPACE表空间名称;

组合zzdxhd:CREATE INDEX zzdxhd名称ON创建表名(列名1、列名2 ) TABLESPACE表空

间名; 

创建反向键zzdxhd: CREATE INDEX zzdxhd名 ON 表名 (列名) reverse TABLESPACE 表空间名; 

zzdxhd使用原则: 

zzdxhd字段建议建立NOT NULL约束 

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

经常出现在Where子句中的字段且过滤性很强的,特别是大表的字段,应该建立zzdxhd; 

可选择性高的关键字 ,应该建立zzdxhd; 

可选择性低的关键字,但数据的值分布差异很大时,选择性数据比较少时仍然可以利用zzdxhd提高效率 

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

A、正确选择复合zzdxhd中的第一个字段,一般是选择性较好的且在where子句中常用的字段上; 

B、复合zzdxhd的几个字段经常同时以AND方式出现在Where子句中可以建立复合zzdxhd;否则单字段zzdxhd; 

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

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

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

频繁DML的表,不要建立太多的zzdxhd; 

不要将那些频繁修改的列作为zzdxhd列; 

zzdxhd的优缺点: 

有点: 

1. 创建唯一性zzdxhd,保证数据库表中每一行数据的唯一性 

2. 大大加快数据的检索速度,这也是创建zzdxhd的最主要的原因 

3. 加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 

4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 

缺点: 

1. zzdxhd创建在表上,不能创建在视图上 

2. 创建zzdxhd和维护zzdxhd要耗费时间,这种时间随着数据量的增加而增加 

3. zzdxhd需要占物理空间,除了数据表占数据空间之外,每一个zzdxhd还要占一定的物理空间,如果要建立聚簇zzdxhd,那么需要的空间就会更大 

4. 当对表中的数据进行增加、删除和修改的时候,zzdxhd也要动态的维护,降低了数据的维护速度 

 

10、zzdxhd的实现方式

都是 B+树zzdxhd, Innodb 是zzdxhd组织表, myisam 是堆表, zzdxhd组织表和堆表的区别要熟悉

 

11、Oraclezzdxhd分为哪几类,说出唯一zzdxhd和位图zzdxhd的概念。

Oraclezzdxhd有B树zzdxhd,位图zzdxhd,函数zzdxhd,簇zzdxhd等。

唯一zzdxhd也是B树zzdxhd的一种,它要求被zzdxhd的字段值不可以重复。在创建的时候使用B树算法创建。

位图zzdxhd并不是采用象唯一zzdxhd那样存储(zzdxhd字段值,记录ROWID)来创建zzdxhd段的,而是为每一个唯一的字段值创建一个位图,位图中使用位元来对应一个记录的ROWID。位元到ROWID是通过映射的到的。

 

12、如何写 sql 能够有效的使用到复合zzdxhd。

由于复合zzdxhd的组合zzdxhd,类似多个木板拼接在一起,如果中间断了就无法用了,所以要能用到复合zzdxhd,首先开头(第一列)要用上,比如index(a,b) 这种,我们可以select table tname where a=XX 用到第一列zzdxhd 如果想用第二列 可以 and b=XX 或者and b like‘TTT%’

 

13、当数据表中A、B字段做了组合zzdxhd,那么单独使用A或单独使用B会有zzdxhd效果吗?(使用like查询如何有zzdxhd效果)

看A、B两字段做组合zzdxhd的时候,谁在前面,谁在后面,如果A在前,那么单独使用A会有zzdxhd效果,单独使用B则没有,反之亦然。同理,使用like模糊查询时,如果只是使用前面%,那么有zzdxhd效果,如果使用双%号匹配,那么则无zzdxhd效果

 

14、数据库zzdxhd的实现(B+树介绍、和B树、R树区别)

http://blog.csdn.net/还单身的金针菇/article/details/7532032

http://www.xuebuyuan.com/2216918.html

 

15、zzdxhd的使用注意事项

https://www.cnblogs.com/zlingh/p/3883716.html

 

16、MYsql 的zzdxhd原理,zzdxhd的类型有哪些,如何创建合理的zzdxhd,zzdxhd如何优化。

zzdxhd是通过复杂的算法,提高数据查询性能的手段。从磁盘io到内存io的转变 

普通zzdxhd,主键,唯一,单列/多列zzdxhd建zzdxhd的几大原则 

1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的zzdxhd,d是用不到zzdxhd的,如果建立(a,b,d,c)的zzdxhd则都可以用到,a,b,d的顺序可以任意调整。 

2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)zzdxhd可以任意顺序,mysql的查询优化器会帮你优化成zzdxhd可以识别的形式 

3.尽量选择区分度高的列作为zzdxhd,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录 

4.zzdxhd列不能参与计算,保持列“干净”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到zzdxhd,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’); 

5.尽量的扩展zzdxhd,不要新建zzdxhd。比如表中已经有a的zzdxhd,现在要加(a,b)的zzdxhd,那么只需要修改原来的zzdxhd即可

http://tech.meituan.com/mysql-index.html 

http://www.cnblogs.com/cq-home/p/3482101.html

 

17、聚集zzdxhd和非聚集zzdxhd的区别。

“聚簇”就是zzdxhd和记录紧密在一起。 

非聚簇zzdxhd zzdxhd文件和数据文件分开存放,zzdxhd文件的叶子页只保存了主键值,要定位记录还要去查找相应的数据块。

 

18、数据库中 BTREE 和 B+tree 区别。

B+是btree的变种,本质都是btree,btree+与B-Tree相比,B+Tree有以下不同点: 

每个节点的指针上限为2d而不是2d+1。 

内节点不存储data,只存储key;叶子节点不存储指针。

http://lcbk.net/9602.html 

Btree 怎么分裂的,什么时候分裂,为什么是平衡的。 

Key 超过1024才分裂B树为甚会分裂? 因为随着数据的增多,一个结点的key满了,为了保持B树的特性,就会产生分裂,就向红黑树和AVL树为了保持树的性质需要进行旋转一样!

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。