新足迹

 找回密码
 注册

精华好帖回顾

· Ebay 和我的宝宝 2006 (2006-2-23) 水晶靴 · 晒晒我的高跟鞋 (更新于21页617楼 - 吃麦当劳意外淘到的鞋) (2008-9-5) 旋木
· 心灵的“重生” ——蜜三郎人物形象分析 (大江健三郎) (2008-9-22) 着我青衣永飘零 · 参加活动~~我的一周搭配日记 加续最后一套382楼 (2009-11-2) VIVIbear
Advertisement
Advertisement
楼主:runxi328

[IT] 85k package 现在这个行情怎么样? [复制链接]

发表于 2010-2-25 14:50 |显示全部楼层
此文章由 中间人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 中间人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我们这边的dba & 个别senior .net developer的连个如何利用clustered index来increase query performance都不懂,做技术做到这个份上,我还能说什么呢?
...


senior一定要做这个?senior只需要知道有这个,然后让dba去做。
Advertisement
Advertisement

2007 年度奖章获得者

发表于 2010-2-25 14:52 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 kawara 于 2010-2-25 15:44 发表


你确定么?

non-clustered index是可以提高效率,因为可以避免table scan。但是对插入、删除效率会有一定冲击,因为要reindex.


冲击是有,但是很小。reindex也会非常快,就在index表上插入一条记录而已....
C.B

发表于 2010-2-25 14:54 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 月亮 于 2010-2-25 15:48 发表


确定, clustered index scan = table scan

哦,我刚才没看清,同意你说的。table scan基本上是最慢的

发表于 2010-2-25 14:54 |显示全部楼层
此文章由 runxi328 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 runxi328 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 月亮 于 2010-2-25 15:48 发表


确定, clustered index scan = table scan


why clustered index need scan? ranged query based on clustered key is "seek" rather than "scan".

clustered index is always hosted in buffer anyway. Not the leave level of actual data.

there must be some confusion, My point is: creating clustered index based on range query condition to increase its query performance.

发表于 2010-2-25 14:56 |显示全部楼层
此文章由 zyzbill 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 zyzbill 所有!转贴必须注明作者、出处和本声明,并保持内容完整
现在市场还是没有以前最高的时候那么火了,薪水高的都是做证券衍生品的,而且要求有此方面的经验的才行,最近多多少少投了几份简历,都因为没有相关经验而失败.

发表于 2010-2-25 14:57 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 runxi328 于 2010-2-25 15:54 发表


why clustered index need scan? ranged query based on clustered key is "seek" rather than "scan".

clustered index is always hosted in buffer anyway. Not the leave level of actual data.

there  ...

你和我刚才一样没看清,月亮的意思是如果你建了个clustered index,你的query又落不到这个index上,就会做table scan(clustered index scan),会很慢
Advertisement
Advertisement

退役斑竹

发表于 2010-2-25 15:00 |显示全部楼层
此文章由 月亮 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 月亮 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 kawara 于 2010-2-25 15:57 发表

你和我刚才一样没看清,月亮的意思是如果你建了个clustered index,你的query又落不到这个index上,就会做table scan(clustered index scan),会很慢


没错,clustered index一个table只能有一个,基本上在table建立的时候会自己以pk为index。

如果你需要查询这个table里所有的column,clustered index无疑是最快的,如果只需要几个column,应该建立non-clustered index.

[ 本帖最后由 月亮 于 2010-2-25 16:02 编辑 ]

发表于 2010-2-25 15:01 |显示全部楼层
此文章由 因为你 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 因为你 所有!转贴必须注明作者、出处和本声明,并保持内容完整
这楼怎么歪成这样?

发表于 2010-2-25 15:02 |显示全部楼层
此文章由 runxi328 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 runxi328 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 kawara 于 2010-2-25 15:57 发表

你和我刚才一样没看清,月亮的意思是如果你建了个clustered index,你的query又落不到这个index上,就会做table scan(clustered index scan),会很慢


我真有点糊涂了,query既然不用这个column,我建clustered index在它上面干吗?我是不是在逗自己玩呢?

我的中文跟英文是不是都很费解啊?

发表于 2010-2-25 15:03 |显示全部楼层
此文章由 runxi328 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 runxi328 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 因为你 于 2010-2-25 16:01 发表
这楼怎么歪成这样?


我也不知道我在哪儿了,sigh.....

退役斑竹

发表于 2010-2-25 15:05 |显示全部楼层
此文章由 月亮 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 月亮 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 runxi328 于 2010-2-25 16:02 发表

我真有点糊涂了,query既然不用这个column,我建clustered index在它上面干吗?我是不是在逗自己玩呢?

我的中文跟英文是不是都很费解啊?


你说的应该是non-clustered index
Advertisement
Advertisement

发表于 2010-2-25 15:05 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 runxi328 于 2010-2-25 16:02 发表


我真有点糊涂了,query既然不用这个column,我建clustered index在它上面干吗?我是不是在逗自己玩呢?

我的中文跟英文是不是都很费解啊?

她为了证明她说的“除非查询的条件正好是clustered index的column,否则是不能提高查询速度的”

2007 年度奖章获得者

发表于 2010-2-25 15:05 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 kawara 于 2010-2-25 15:57 发表

你和我刚才一样没看清,月亮的意思是如果你建了个clustered index,你的query又落不到这个index上,就会做table scan(clustered index scan),会很慢

不对吧,只要query落在non-clustered index上,即使有一个clustered index,也不用Table Scan啊
C.B

发表于 2010-2-25 15:08 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 NNX 于 2010-2-25 15:47 发表
小声问一下, 卡瓦到底是做网络的还是数据库? 我怎么记得你好像是搞网络的?

我既不是做网络也不是做数据库的。

以前在银行做会计,后来为了谋生做了一名developer。

退役斑竹

发表于 2010-2-25 15:09 |显示全部楼层
此文章由 月亮 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 月亮 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 coolioo 于 2010-2-25 16:05 发表

不对吧,只要query落在non-clustered index上,即使有一个clustered index,也不用Table Scan啊


nod,所以说按performance排列:
1。non-clustered index
2。clustered index
3。no index (比较少见)

发表于 2010-2-25 15:10 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 coolioo 于 2010-2-25 16:05 发表

不对吧,只要query落在non-clustered index上,即使有一个clustered index,也不用Table Scan啊

她说的意思是假定只做了一个clustered index的情况。

来说明也要做non-clustered index。

看来只有我理解了月亮版主

原帖由 月亮 于 2010-2-25 15:38 发表
除非查询的条件正好是clustered index的column,否则是不能提高查询速度的。

因为clustered index scan 是要把整个table读入buffer的。

建立适合的non-clustered index可以大幅度提高速度,特别是对大table

[ 本帖最后由 kawara 于 2010-2-25 16:11 编辑 ]
Advertisement
Advertisement

发表于 2010-2-25 15:10 |显示全部楼层
此文章由 runxi328 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 runxi328 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 月亮 于 2010-2-25 16:05 发表


你说的应该是non-clustered index


no, non-clustered index 做range query 要先 non-clustered index seek---> clustered index scan

性能会差很多.

range query against clustered index 一定是 clustered index seek, 而不是 clustered index scan.

否则B-tree失去了存在的意义,还不如都是heap,什么都是scan.

发表于 2010-2-25 15:13 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 runxi328 于 2010-2-25 16:10 发表


no, non-clustered index 做range query 要先 non-clustered index seek---> clustered index scan

性能会差很多.

range query against clustered index 一定是 clustered index seek, 而不是 clustered i ...

不是吧,index包含数据物理存放的信息,找到了就不需要做table scan了。

2007 年度奖章获得者

发表于 2010-2-25 15:14 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
如果做range query,建clustered-index肯定要快了。因为不用scan index table。直接seek两下就出来了。

发表于 2010-2-25 15:14 |显示全部楼层
此文章由 runxi328 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 runxi328 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 月亮 于 2010-2-25 16:09 发表


nod,所以说按performance排列:
1。non-clustered index
2。clustered index
3。no index (比较少见)


have to disagree.

没有固定的顺序. range query 首先要考虑clustered index, 而不是non-clustered index.如果多个range query, 选一个用得最多的做clustered index.

发表于 2010-2-25 15:16 |显示全部楼层
此文章由 runxi328 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 runxi328 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 coolioo 于 2010-2-25 16:14 发表
如果做range query,建clustered-index肯定要快了。因为不用scan index table。直接seek两下就出来了。


没错!!!
Advertisement
Advertisement

退役斑竹

发表于 2010-2-25 15:16 |显示全部楼层
此文章由 月亮 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 月亮 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 runxi328 于 2010-2-25 16:10 发表


no, non-clustered index 做range query 要先 non-clustered index seek---> clustered index scan

性能会差很多.

range query against clustered index 一定是 clustered index seek, 而不是 clustered i ...


non-ci 是占硬盘的,它是把数据copy一份做成一个mini-table储存
ci是不占硬盘的,就是在一堆杂乱排列的数据上加上指针做成b-tree

发表于 2010-2-25 15:16 |显示全部楼层
此文章由 zn7726 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 zn7726 所有!转贴必须注明作者、出处和本声明,并保持内容完整
以上20-30层讨论的问题, 我记得CSE的Xueming Lin很在行 (paopaobing(88))

发表于 2010-2-25 15:17 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 月亮 于 2010-2-25 16:09 发表


nod,所以说按performance排列:
1。non-clustered index
2。clustered index
3。no index (比较少见)

太绝对了吧,这个要分析常用Query的和数据用途。

发表于 2010-2-25 15:20 |显示全部楼层
此文章由 runxi328 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 runxi328 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 kawara 于 2010-2-25 16:13 发表

不是吧,index包含数据物理存放的信息,找到了就不需要做table scan了。


No.
non-clustered index leaf level 存放clustered index key, 取到这个key之后, 在从clustered index的B-tree上做binary search,
这个过程要navigate 2 个tree, 所以不是最优的.

发表于 2010-2-25 15:22 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 runxi328 于 2010-2-25 16:20 发表


No.
non-clustered index leaf level 存放clustered index key, 取到这个key之后, 在从clustered index的B-tree上做binary search,
这个过程要navigate 2 个tree, 所以不是最优的.

你自己说的 non-clustered index 做range query 要先 non-clustered index seek---> clustered index scan

clustered index scan就是table scan,我只是反驳你这句而已。
Advertisement
Advertisement

发表于 2010-2-25 15:26 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 coolioo 于 2010-2-25 14:50 发表
建clustered index会降低Insert的performance,尤其是数据量很大的时候。因为clustered index将row物理排序,你在中间插一条记录,所有后面的记录都要在磁盘上顺序移位。

Non-clustered index就没有这问题。clust ...

Not true

clustered index insert:
(1) when you setup index, try to find a reasonable column, for example, transaction_no, most likely no page-split,
(2) Even you didn't pick up the right column, if you put right space to each page, (fill-factor), page-splitting wont happen

发表于 2010-2-25 15:26 |显示全部楼层
此文章由 runxi328 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 runxi328 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 月亮 于 2010-2-25 16:16 发表


non-ci 是占硬盘的,它是把数据copy一份做成一个mini-table储存
ci是不占硬盘的,就是在一堆杂乱排列的数据上加上指针做成b-tree


sql server 2005+ clustered index non leaf level 的数据在buffer中,之前没在buffer中它也是占硬盘空间的。
但很小,几个million records的table 的b-tree 也不会超过5-6层(可以自己手动计算),对i/o来说就一次就可以搞定,然后驻留buffer.

non_clustered index 不驻留buffer, i agree.

发表于 2010-2-25 15:31 |显示全部楼层
此文章由 典 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 典 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 runxi328 于 2010-2-25 15:20 发表


No.
non-clustered index leaf level 存放clustered index key, 取到这个key之后, 在从clustered index的B-tree上做binary search,
这个过程要navigate 2 个tree, 所以不是最优的.


Agree with you. Happened to one of our procs, after I changed the non-clustered index( put inc column), to avoid jumping to another page to retrieve value, the performance improved a huge,

发表于 2010-2-25 15:33 |显示全部楼层
此文章由 runxi328 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 runxi328 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 于 2010-2-25 16:31 发表


Agree with you. Happened to one of our procs, after I changed the non-clustered index( put inc column), to avoid jumping to another page to retrieve value, the performance improved a huge,


典,你跟coolioo基本上知道我在说什么,谢谢!!

评分

参与人数 1积分 +1 收起 理由
kawara + 1 你自己概念不清。

查看全部评分

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部