【每日更新】【SQL实用大杂烩】
11.分页1.
select * from (select top 2 * from( select top 3 * from t_table order by field1) a order by field1 desc) b order by field1
10.
row_number函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号。row_number函数的用法如下面的SQL语句所示:
row_number必须和over(order by field1)一起使用!
9.
聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致
,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦
具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。
聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索
引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,
降低了执行速度。建议使用聚集索引的场合为:
a.此列包含有限数目的不同值;
b.查询的结果返回一个区间的值;
c.查询的结果返回某值相同的大量结果集。
非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致
,聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的
数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非
聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。建议使用非聚集索
引的场合为:
a.此列包含了大量数目不同的值;
b.查询的结束返回的是少量的结果集;
c.order by 子句中使用了该列。
--不用索引查询
Select * FROM IndexTestTable WHIT(INDEX(0))
Where Status='B'
--创建聚集索引
Create CLUSTERED INDEX icIndexTestTable
ON IndexTestTable(Status)
GO
--使用索引查询
Select * FROM IndexTestTable WITH(INDEX(icIndexTestTable))
Where Status='B'
表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列
称为表的主键.(默认为聚集索引)
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数
据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索
引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样
。
非聚集索引与课本中的索引类似。数据存储在一个地方,索引存储在另一个地方
,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中
的信息按另一种顺序存储(这可以由聚集索引规定)。
如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。
聚集索引..就像我们新华字典中的按拼音排序..即你查.."爱"字..可以在前面看到"
癌"字...但不你不在前后页中看到"受"字..
而非聚集索引..就是新华字典中的按部首..笔划排序...
聚集索引相当于我们书本上前面的目录的一样,它可以方便快速的找到你想找的内容
,而非聚集索引就相当于书最后几页的解释,它是对书中某个语句或者是生词的解释
,就像我们上学时候的地理说一样,书后面都有各种地理名称的英文解释;
《数据库原理》里面的解释:聚集索引的顺序就是数据的物理存储顺序,而非聚集索
引的顺序和数据物理排列无关。因为数据在物理存放时只能有一种排列方式,所以一
个表只能有一个聚集索引。
在SQL SERVER中,索引是通过二叉树的数据结构来描述的;我们可以如此理解这个两
种索引:聚集索引的叶节点就是数据节点,而非聚集索引的叶节点仍然是索引节点,
只不过其包含一个指向对应数据块的指针。
聚集索引会降低 insert,和update操作的性能,所以,是否使用聚集索引要全面
衡量。
8.
写一个存储过程。大家知道SQL SERVER的存储过程是事先编译好的SQL语句,它的执行效率要比通过WEB页面传来的SQL语句的执行效率要高。
7.
如何实现从大容量的数据库中快速地查询出您所需要的数据方法。当然,我们介绍的这些方法都是“软”方法,在实践中,我们还要考虑各种“硬”因素,如:网络性能、服务器的性能、操作系统的性能,甚至网卡、交换机等。
6.
order by按聚集索引列排序效率最高
影响数据库响应时间最大的因素是物理I/O操作。而限制物理I/O操作此处的最有效方法之一就是使用TOP关键词了。TOP关键词是SQL SERVER中经过系统优化过的一个用来提取前几条或前几个百分比数据的词。经笔者在实践中的应用,发现TOP确实很好用,效率也很高。
聚集索引是如此的重要和珍贵,所以笔者总结了一下,一定要将聚集索引建立在:
1、您最频繁使用的、用以缩小查询范围的字段上;
2、您最频繁使用的、需要排序的字段上。
非
聚集索引比聚集索引层次多,添加记录不会引起数据顺序的重组。
5.
通配符%在字符串的开头使得索引无法使用;
字段提取要按照“需多少、提多少”的原则,避免“select *”;
4.
select * from table1 where name='zhangsan' and tID > 10000
和执行:
select * from table1 where tID > 10000 and name='zhangsan'
SQL SERVER中有一个“查询分析优化器”,它可以计算出where子句中的搜索条件并确定哪个索引能缩小表扫描的搜索空间,也就是说,它能实现自动优化。
3.
不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。
对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。
2.
在进行数据查询时都离不开字段的是“日期”还有用户本身的“用户名”。
既然这两个字段都是如此的重要,我们可以把他们合并起来,
建立一个复合索引(compound index)。
而如果仅用复合聚集索引的非起始列作为查询条件的话,这个索引是不起任何作用的。
如果复合索引的所有列都用上,而且查询结果少的话,这样就会形成“索引覆盖”,因而性能可以达到最优。同时,请记住:无论您是否经常使用聚合索引的其他列,但其前导列一定要是使用最频繁的列。
索引有助于提高检索性能,但过多或不当的索引也会导致系统低效。过多的索引甚至会导致索引碎片。
索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到解决。
1.
默认sql会自动在主键上建立 聚集索引 的误区:
1)如果数据量很大很大,那么因为插入数据造成的 聚集索引的维护开销 就会变得很大,而 非聚集索引不存在此事
2)如果默认对ID进行加 聚集索引,但是很多时候ID是自增的,对于 实际上ID查询用的不是很多,所以可能会浪费 每个表只能建立一个聚集索引以及聚集索引本身的 资源。
(1)仅在主键上建立聚集索引,并且不划分时间段: Select gid,fariqi,neibuyonghu,title from tgongwen 用时:128470毫秒(即:128秒) (2)在主键上建立聚集索引,在fariq上建立非聚集索引: select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi> dateadd(day,-90,getdate()) 用时:53763毫秒(54秒) (3)将聚合索引建立在日期列(fariqi)上: select gid,fariqi,neibuyonghu,title from Tgongwen where fariqi> dateadd(day,-90,getdate()) 用时:2423毫秒(2秒) 虽然每条语句提取出来的都是25万条数据,各种情况的差异却是巨大的,特别是将聚集索引建立在日期列时的差异。事实上,如果您的数据库真的有1000万容量的话,把主键建立在ID列上,就像以上的第1、2种情况,在网页上的表现就是超时,根本就无法显示。这也是我摒弃ID列作为聚集索引的一个最重要的因素。
【每日更新】【SQL实用大杂烩】的更多相关文章
- 转载:第二弹!全球首个微信小程序(应用号)开发教程!通宵吐血赶稿!每日更新!
今天一波三折,承受了超出预料的压力和煎熬,最后还是决定继续放出我的更新教程.我想我一没有泄露公司的代码,二没有提供泄露开发工具下载,只是从程序猿角度写了篇开发日志.我已经做好了最坏的准备,就算放弃这份 ...
- Android学习资料PDF免费大放送,每日更新!有需要的亲看这里
说明:以前有资料分享的时候,都叫大家留下自己的QQ邮箱,这样被很多的程序猿们认为我是专门来钓你们的QQ邮箱的.为此给大家带来的顾虑,深表抱歉.从现在开始,以后的分享资料我都会放在自己的百度网盘中,提供 ...
- 即使用ADO.NET,也要轻量级动态生成更新SQL,比Ormlite性能更高
先上测试结果: //测试1000次针对同一个表同一个字段更新,比Ormlite平均快2.34倍 //生成SQL+ExecuteNonQuery Ormlite 倍数 //6513ms 15158ms ...
- 高效批量更新 sql 字段的值(从一个表向另一个表更新)
里给出一种更高效.简洁的做法,批量更新SQL ,一句SQL就可以替代麻烦的循环过程,有MS SQLServer.Oracle.DB2下的写法--关键点:t4和t1是同一个table,primary k ...
- 经常使用的C#代码(每日更新)
欢迎使用该软件,软件中包括了经常使用的代码.而且每日更新. 该软件还在开发中,O(∩_∩)O~ 目的: 1.提高工作效率 2.格式化代码,方便阅读 3.必备工具 4.偷懒专用 watermark/2/ ...
- 警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱
警惕 MySql 更新 sql 的 WHERE 从句中的 IN() 子查询时出现的性能陷阱 以下文章来源:https://blog.csdn.net/defonds/article/details/4 ...
- (译)Windows Azure的7月更新:SQL数据库,流量管理,自动缩放,虚拟机
Windows Azure的7月更新:SQL数据库,流量管理,自动缩放,虚拟机 今早我们释出一些很棒的Windows Azure更新.这些新的提升包括:SQL数据库:支持SQL自动导出和一个新的高级层 ...
- Python通过pymysql连接数据库并进行查询和更新SQL方法封装
1.通过pymysql连接数据库并进行数据库操作2.查询数据3.更新修改SQL方法封装 import pymysql.cursors import json class OperationMysql: ...
- MySql 学习之 一条更新sql的执行过程
上一篇文章咱们说了一条查询sql的执行过程.如果没有看过上一篇文章的可以去看下上一篇文章,今天咱们说说一条更新sql的执行过程. 上面一条sql是将id为1的分数加上10. 那么它的执行流程是怎样的呢 ...
随机推荐
- Java Internet
网络通信: 网络通信三要素: IP 协议 端口 TCP: 建立连接,发送速度慢 三次握手协议 UDP: 不需要建立连接,发送速度快 安全性低 a) 使用UDP实现数据的发送 1 创建Socket端点实 ...
- SpringBoot入门篇--热部署
在项目的开发过程中我们难免会涉及到对代码的修改,有bug我们也需要对代码进行修改,这时候我们就需要重启服务器.但是,我们知道的是这个过程是相当的痛苦的,重启服务器涉及到了所有资源的重新加载,过程那是相 ...
- vim编程设置
在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进 等功能的.为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc.在启动vim时,当前用户 ...
- RabbitMQ-从基础到实战(4)— 消息的交换(中)
转自:https://www.cnblogs.com/4----/p/6590459.html 1.简介 本章节和官方教程相似度较高,英文好的可以移步官方教程 在上一章的例子中,我们创建了一个消费者, ...
- ajax的一些小知识
eval()可以把一个字符串转化为本地的js代码来执行 <script type="text/javascript"> var str = "alert('h ...
- starling 第一天
flashplayer_27_sa_debug: https://files.cnblogs.com/files/dt1991/flashplayer_27_sa_debug.rar flashpla ...
- 8 并发编程-(线程)-多线程与多进程的区别&Thread对象的其他属性或方法
1.开启速度 在主进程下开启线程比 开启子进程快 # 1 在 主进程下开启线程 from threading import Thread def work(): print('hello') if ...
- Python之从头开始建立项目流程
一,需求是在桌面建立一个名字为美妆的项目 1)cd desktop 2)mkdir meizhuang_server 3)安装虚拟环境 要在meizhuang_server文件夹下 pipenv - ...
- web 项目手机页面不允许缩放
https://blog.csdn.net/ljw_jiawei/article/details/80421240
- 代码报错记录-MAVEN
报错: COMPILATION ERROR : 程序包不存在. 说是找不到程序包,我的JUNIT是父项目中的,子项目是从JAVA项目转为MAVEN项目的,难道在转成MAVEN项目时对POM文件的修改有 ...