走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串
对大量数据进行查询时,可以应用到索引技术。索引是一种特殊类型的数据库对象,它保存着数据表中一列或者多列的排序结果,有效地使用索引可以提高数据的查询效率。大家面试初级、中级或者高级程序员的时候应该大部分都会被问到这样一些问题,你了解索引吗?你知道索引的分类吗?你知道这些索引的区别吗?你如何去创建有效的索引。本章让大家学会反问面试官 hold住全场。 --_____--
友情客串
最近面试的文章比较火 客串一下 我只简单问2个问题 看看有多少人能直接回答出来 都是比较基础的
1.基类虚函数、派生类重写 与 基类普通函数、派生类覆盖的区别(-____-)
2.Using闭包中try catch,异常捕获后抛出,那么using资源能否正常释放,概述原因(-____-)
答案在文章结尾揭晓
基本知识 (面试官会问的)
索引是神马
一般说法:索引是与表关联的磁盘上结构,可以加快从表中检索行的速度。索引包含由表中的一列或多列生成的键。这些键存储在一个结构中,使 SQL Server 可以快速有效地查找与键值关联的行。
hold说法:索引说白了就是Balanced Tree(简称B树)结构,多层次、自维护,节点存放表的数据标识信息,如果表中的一条记录在磁盘上占用500字节的话,我们对其中10字节的一个字段建立索引,那么该记录对应的索引块的大小只有10字节。这样检索IO访问量要少的多。
索引的分类
一般说法:聚集索引与非聚集索引
hold说法:聚集索引、非聚集索引、唯一索引、包含性列索引、索引视图、全文索引、XML索引
说下聚集索引与非聚集索引的区别
一般说法:聚集索引是基于记录内容在数据表内的排序和存储。非聚集索引不会为数据表的数据进行物理上排序,只是将索引建立在索引页上,在查询数据时一样可以从索引中找到记录存放的位置。
hold说法:聚集索引根据数据行的键值在表中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。
非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。从非聚集索引中的索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。
一张表中可以建立几个聚集索引和非聚集索引
一般说法:1个聚集索引和249个非聚集索引
hold说法:冷哼一声、笑而不语。
索引的设计原则
一般说法:表增删改操作多的少用索引 查操作多的适当建立索引
hold说法:
1.大量的索引会影响DML语句的性能;
2. 对小表进行索引可能不会产生优化效果;
3.对经常用于查询中的谓词和连接列创建非聚集索引;
4.覆盖索引可以提高查询性能;
5.聚集索引,最好保持较短的索引键;
6.考虑对定义完善的的列使用筛选索引;
7.如果索引包含多个列 ,应考虑列的顺序;
进阶知识(可以用来调戏面试官)
创建索引的限制
每个索引最多16个键列;
索引键最长900字节;
大型对象数据类型不能作为索引键列;
唯一索引:唯一索引确保索引键不包含重复的值,因此,表或视图中的每一行在某种程度上是唯一的。聚集索引和非聚集索引都可以是唯一索引。
设计原则:
唯一索引能够保证索引键中不包含重复的值,从而使表中的每一行从某种方式上具有唯一性。只有当唯一性是数据本身的特征时,指定唯一索引才有意义。例如,如果您希望确保 HumanResources.Employee 表的 NationalIDNumber 列中的值唯一,当主键为 EmployeeID 时,可以为 NationalIDNumber 列创建一个 UNIQUE 约束。如果用户尝试在该列中为多个雇员输入相同的值,将显示错误消息并且不能输入重复的值。
唯一索引能够确保定义的列的数据完整性并提供了对查询优化器有用的附加信息。
包含性列索引:一种非聚集索引,它扩展后不仅包含键列,还包含非键列。
设计原则:
重新设计索引键大小较大的非聚集索引,以便只有用于搜索和查找的列为键列。将覆盖查询的所有其他列设置为包含性非键列。这样,将具有覆盖查询所需的所有列,但索引键本身较小,而且效率高。
USE AdventureWorks;
GO
SELECT AddressLine1, AddressLine2, City, StateProvinceID, PostalCode
FROM Person.Address
WHERE PostalCode BETWEEN N'98000' and N'99999';
若要覆盖查询,必须在索引中定义每列。尽管可以将所有列定义为键列,但键大小为 334 字节。因为实际上用作搜索条件的唯一列是 PostalCode
列(长度为 30 字节),所以更好的索引设计应该将 PostalCode
定义为键列并包含作为非键列的所有其他列。
USE AdventureWorks;
GO
CREATE INDEX IX_Address_PostalCode
ON Person.Address (PostalCode)
INCLUDE (AddressLine1, AddressLine2, City, StateProvinceID);
索引视图:视图的索引将具体化(执行)视图,并将结果集永久存储在唯一的聚集索引中,而且其存储方法与带聚集索引的表的存储方法相同。创建聚集索引后,可以为视图添加非聚集索引。
设计原则:对视图创建索引的另一个好处是:优化器可以在未直接在 FROM 子句中指定某一视图的查询中使用该视图的索引。这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。
索引视图可以提高下列查询类型的性能:1.处理大量行的联接和聚合。2.许多查询经常执行的联接和聚合操作。 3.决策支持工作负荷。
全文索引:这个虫子以后会单独开全文检索章节来讲
XML:xml 数据类型列中 XML 二进制大型对象 (BLOB) 的已拆分持久表示形式。XML实例的最大数据量可以达到2GB,如果在没有索引的xml字段里查询会很
耗时,在XML字段上创建的索引就是xml索引。
设计原则:主 XML 索引,辅助 XML 索引。xml 类型列的第一个索引必须是主 XML 索引。使用主 XML 索引时,支持三种类型的辅助索引。这些类型包括 PATH、VALUE 和 PROPERTY。根据查询类型的不同,这些辅助索引可能有助于改善查询性能。
提高篇(和面试无关了)
索引优化
无论何时对基础数据执行插入,更新或删除操作,数据库引擎都会自动维护索引。这些修改可导致索引中产生碎片;碎片非常多的索引可能会降低查询性能,导致应用程序响应缓慢。
1.定期整理索引;
2.设置索引并行度;
3.分析TRACE数据,调整索引;
聚集表、堆和索引
聚集表是有聚集索引的表。数据行基于聚集索引键按顺序存储。聚集索引按 B 树索引结构实现,B 树索引结构支持基于聚集索引键值对行进行快速检索。索引中每个级别的页(包括叶级别的数据页)链接在一个双向链接的列表中。但是,通过使用键值来执行从一个级别到另一级别的导航。
堆是没有聚集索引的表。数据行不按任何特殊的顺序存储,数据页也没有任何特殊的顺序。数据页不在链接列表内链接。
菜鸟如何有效的创建索引
前提是你有线上服务器的权限 -___-
首先打开SQL Server Profiler新建一个跟踪
根据自己选择针对性选择属性
运行一段时间保存跟踪文本
打开优化引擎
根据自己需求设置
分析并根据系统的建议进行优化
因为虫子跑的本地环境 下面的步骤就不截图了 你们都懂的
和索引关联的存储过程
sp_helpindex报告有关表或视图上索引的信息。
exec sp_helpindex 'PPS_App_Infomation'
根据sys.indexes视图来查看索引信息
select * from sys.indexes
至于索引增删查改的语法网上一搜一片的 就不造轮子了 关于索引还有很多高级应用例如 虚拟列索引、选择索引等等 不过大家未必感兴趣 实用才是王道 如果有人对这些感兴趣可以留言讨论
客串答案
是不是网上也没找到想要的答案 O(∩_∩)O
1.虚函数重写是运行时的多态 派生类的覆盖是隐藏基类的方法
2.using的dispose原理和try catch的finally是一样的
很多程序员会抱怨别人和自己同样的工龄 为什么别人的薪水那么高 也有很多程序员觉得自己牛气冲天 只是没遇到伯乐 其实当自己不淡定的时候 不如回头看看 重头学一遍 或许自己的观点会改变很多
希望本篇对大家帮助 大家的支持才是虫子的动力 -____-
转载于:https://blog.51cto.com/dubing/712445
相关文章:
“编程能力差的程序员,90%会输在这点上”谷歌AI专家:其实都是瞎努力
最近几年,我看过市面上很多 Python和人工智能的教程和书籍,它们大都这样讲:先从 Python 人工智能的历史讲起开始,再介绍的基本语法规则,Python 的 list, dict, tuple 等数据结构,最后学习机器学习、深度学习…

查询表空间使用情况
2019独角兽企业重金招聘Python工程师标准>>> SELECT a.tablespace_name "表空间名", total "表空间大小", free "表空间剩余大小", (total - free) "表空间使用大小", total / (1024 * 1024 * 1024) "表空间大小(…
一只端午节鸭蛋粽子的背后:AI 与农业
作者 | 硬核云顶宫责编 | Carol封图 | CSDN 下载自视觉中国今年的端午节,食品界的营销鬼才五芳斋又发了最新广告——《朋友们蘸起来》,这则视频通过一种科幻大片的风格展示了农业与科技的完美结合,可以说在一只端午节粽子背后有AI的养猪、种的…

一些实用的 Javascript 代码
οncοntextmenu"window.event.returnvaluefalse" 将彻底屏蔽鼠标右键<table border οncοntextmenureturn(false)><td>no</table> 可用于Table <body onselectstart"return false"> 取消选取、防止复制 οnpaste"return fa…

围观文件穿越操作
1. 打开文件用IoCreateFile,其他比较好发irp的(比如删除操作)走FSD irp 删除文件部分处理了删除正在运行的exe镜像部分,做法是方法是IAT Hook MmFlushImageSection 但是这样对于独占文件依旧不能处理,只好等到关机…

图论 - 欧拉回路
Description 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路?Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数N (…

学习 Linux,101: 引导系统
2019独角兽企业重金招聘Python工程师标准>>> 系列文章: http://www.ibm.com/developerworks/cn/views/linux/libraryview.jsp?search_by%E5%AD%A6%E4%B9%A0linux101 从 BIOS 到运行 Linux 系统 引导顺序 在我们深入了解启动加载程序(比如 LI…

用Enter键取代tab键
1. this.TextBox1.Attributes.Add("OnKeyPress","<script>if keycode13 keycode9; return false;</script>");2. <input typetext οnkeydοwn"if (event.keyCode 13) event.keyCode 9;">
程序员:我受够了!不想再在小厂里干Java了!
你是否熟悉这样的情形:每天10点到公司,打开电脑:10个小时的增删改查,搬砖写代码的一天就这样开始了。刚毕业时候的你踌躇满志,按照自己的原定计划,这时候应该混到了阿里P6。可现在在小厂苦苦挣扎࿰…

iOS中UISearchBar(搜索框)使用总结
2019独角兽企业重金招聘Python工程师标准>>> iOS中UISearchBar(搜索框)使用总结 初始化:UISearchBar继承于UIView,我们可以像创建View那样创建searchBar UISearchBar * bar [[UISearchBar alloc]initWithFrame:CGRectMake(20, 100, 250, 40)…

Linux常用性能检测命令
一、uptime Uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总体评估(load average)。load average值分别记录了上个1分钟,5分钟和15分钟间隔的负载情况,load average不是一个百…

怎样把DataGrid存放在ViewState中的无用数据卡掉
作者:无间道的博客http://www.cnblogs.com/wangsaokui/articles/10031.html 怎样把 DataGrid 存放在 ViewState 中的无用数据(有时候确实如此)卡掉,大家知道,一般而言DataGrid在ViewState中会存放表格中的所有数据,这样会导致View…
深度学习先驱 Yann LeCun 被骂到封推!AI 偏见真该甩锅数据集?
整理 | 夕颜出品 | CSDN(ID:CSDNnews)最近,人工智能领域又发生了一次热热闹闹的争论,随后演变成一场偏离轨道的争吵,目前以 Yann 道歉封推暂告一段落......争论来龙去脉这次争论的主角是图灵奖得主、人工智能标杆性人物…

JS加强学习-DOM学习01
JavaScript由三个部分组成:ECMAScript、DOM、BOM。前面已经学习了ECMAScript中的基础内容,现在可以开始学习DOM部分了,在DOM中更多的是实际效果的展现。 1. DOM定义 DOM:document object model 文档对象模型 它是将整个页面文档封…

android 游戏引擎libgdx demo cuboc分析
开始学习android游戏开发也有一段时间了,挑选libgdx这个游戏引擎来进行学习和开发。Libgdx是一款支持2D与3D游戏开发的游戏类库,并且它是夸平台的。例如你可以在windos下开发,同样的代码也可以运行在android上。 刚开始学习这个游戏引擎可能会感觉无从下手&#…
倒计时1天 | 张钹院士领衔,AI开发者大会20大论坛全攻略!
2020年7月3—4日,由 CSDN 主办的第三届 AI 开发者大会(AI ProCon 2020)(大会官网:https://aiprocon.csdn.net/)将以线上直播的形式与大家相见。本次大会历时2天,一次性设立6大主题、20大精彩分论…

在页面中导入文件
1. <% Response.WriteFile ("Yourfile.inc") %> 2. Server.Execute("Yourfile.inc")

How Tomcat works — 四、tomcat启动(3)
上一节说到StandardService负责启动其子组件:container和connector,不过注意,是有先后顺序的,先启动container,再启动connector,这一节先来看看container。 目录 Pipeline和VavleStandardEngine类和Standar…

DataList分页
<% Page Language"C#" %> <% Import Namespace"System.Data" %> <% Import Namespace"System.Data.OleDb" %> <Script Language"C#" Runat"Server"> /* Create By 飞刀 http://www.aspcn.com 20…

【中文】Joomla1.7扩展介绍之Googlemaps Plugin
Googlemaps Plugin 插件分类:Maps 支持版本:1.5 /1.6 /1.7 关注程度:【最流行的】 所属类型:插件、多语种 可以在 Joomla 1.5.x (native), 1.6.x and 1.7.x. 的内容条目、模块或者组件中显示一个(或多个)…
一文读懂:GoogleNet的Inception从v1到v4的演变
来源 | 机器学习炼丹术GoogleNet和VGG是ImageNet挑战赛中的第一名和第二名。共同特点就是两个网络的层次都更深了。但是:VGG继承了LeNet和AlexNet的一些框架结构而GoogleNet则做了更大胆的尝试,虽然深度有22层,但是参数却是Alexnet的1/12.而V…

几何画板画一个五边形内部的方法
五边形属于多边形里面比较简单的,就是在四边形的基础上增加一条边而已,五边形在平面几何学上指所有由五条边围衬成及有五个角的多边形。完美五边形和正五边形都是五边形的一种特殊类型。几何画板作为专业绘图工具,可以轻松就画出五边形&#…

GDAL Data Model(转)
即描述一个GDAL data store能够包含的信息的类型。 Dataset 一个dataset (即一个GDALDataset 对象)是一组相关的raster bands和一些属于它们的公共信息的集合。尤其是dataset有一个适用于它所有bands的关于raster size的概念,它是用pixels 和…
实战:人脸识别实战项目(源码共享)
首先我想问个问题:现在什么工程师最值钱?毫无疑问,我想超 90% 的都会说:人工智能工程师。也难怪,随着近几年人工智能的发展,已经逐渐渗透到了各个领域,比如:医疗、教育、机械自动化、…

Calendar如何只显示“一、二、三...日”,不显示“星期”
秋水无恨 asp.net Calendar DayNameFormat Globalization DayNames http://www.csdn.net/develop/Read_Article.asp?id15715 Calendar的DayNameFormat,如FirstLetter ,FirstTwoLetters ,Full ,Short 但是争对英文而言的…

gulp插件之browser-sync安装报错
2019独角兽企业重金招聘Python工程师标准>>> 最近做前端开发,一直用gulp来写一些自动化脚本。之前用的npm的镜像为edunpm,很简单,因为这个镜像非常的快。 但是不知道为什么browser-sync插件总是下载不成功。。。 后来用nrm切换到t…
TensorFlow、PyTorch之后,“国产”AI框架还有没有机会?
出品 | AI科技大本营(ID:rgznai100)众所周知,在机器学习框架领域,PyTorch、TensorFlow已分别成为目前学界和业界使用最广泛的两大实力玩家,而紧随其后的Keras、MXNet等框架也由于其自身的独特性受到开发者的喜爱。 202…

结构成员访问的三种方法
结构成员访问的三种方法 #include "stdio.h"#include "string.h"#include <stdlib.h>main (){struct student{int num;char * name;int score;}stu;struct student *p&stu;stu.num1;(*p).name"tom";p->score78;printf("%d\n&q…

数据库字段命名及设计规范
1.设计原则 1) 标准化和规范化数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但 Third Normal Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,遵守3NF 标准的数据库的表设计原则是…

更改管理GPO的域控制器
1.GPO先被存储到扮演PDC模拟器操作主机角色的域控制器,然后再由它将其复制到其他域控制器,域成员计算机再通过域控制器来应用GPO.2.可通过DC选项与组策略两种方式来将管理GPO的域控制器从PDC模拟器操作主机更改为其他域控制器。转载于:https://blog.51ct…