avatar
如何决定index# Database - 数据库
f*e
1
non-cluster index,每增加一个column,都会让search的cost减少,但是I/D/U的cost
增加。
如何找到这个平衡点呢?
Let's say, I have a table to log client activities.
CREATE TABLE ClientLog
(
UserID INT,
TransID INT,
MachineName NVARCHAR(128)
Time DATETIME
)
UserID and TransID are unique non-clustered index.
When a transaction starts, a log is inserted. When a transaction is closed,
the log is deleted.
Now, I am thinking if I need to create another non-cluster index to include
UserID, TransID and MachineName because most of Delete an
avatar
B*g
2
我觉得你这个case显然I是最重要的。你能有多少时间去S这个log table。俺们公司的l
ogtable一个index都没有,呵呵。

cost
,
include
index,
03.

【在 f*****e 的大作中提到】
: non-cluster index,每增加一个column,都会让search的cost减少,但是I/D/U的cost
: 增加。
: 如何找到这个平衡点呢?
: Let's say, I have a table to log client activities.
: CREATE TABLE ClientLog
: (
: UserID INT,
: TransID INT,
: MachineName NVARCHAR(128)
: Time DATETIME

avatar
c*d
3
如果是When a transaction starts, a log is inserted. When a transaction is
closed, the log is deleted.
这个表应该很小
如果表不大,完全没必要创建Index
avatar
a*s
4
how to define a table is big or not big?
How about 10k records?
I tested a table with 10k records w/o index for joining purpose, seems they
have the same performance.

【在 c*****d 的大作中提到】
: 如果是When a transaction starts, a log is inserted. When a transaction is
: closed, the log is deleted.
: 这个表应该很小
: 如果表不大,完全没必要创建Index

avatar
a*t
5
are you sure when you using the table with index, the query is indeed using
the index seek instead of table scan?

they

【在 a*******s 的大作中提到】
: how to define a table is big or not big?
: How about 10k records?
: I tested a table with 10k records w/o index for joining purpose, seems they
: have the same performance.

avatar
B*g
6
一般大。

they

【在 a*******s 的大作中提到】
: how to define a table is big or not big?
: How about 10k records?
: I tested a table with 10k records w/o index for joining purpose, seems they
: have the same performance.

avatar
c*d
7
10k的表只能算是中等偏小的表
不过我对你的试验很感兴趣,你是10k table join 10k table吗?
10k vs. 100m性能应该有很大区别呀

they

【在 a*******s 的大作中提到】
: how to define a table is big or not big?
: How about 10k records?
: I tested a table with 10k records w/o index for joining purpose, seems they
: have the same performance.

avatar
B*g
8
如果table没有statistic,会不会有影响?

【在 c*****d 的大作中提到】
: 10k的表只能算是中等偏小的表
: 不过我对你的试验很感兴趣,你是10k table join 10k table吗?
: 10k vs. 100m性能应该有很大区别呀
:
: they

avatar
a*s
9
table1 10k
id not index or index
table2 100m
id not indexed
where table1.id = table2.id
They are almost the same. Database is postgre. Not sure if postgre will
index the table1.id in the memory.

【在 c*****d 的大作中提到】
: 10k的表只能算是中等偏小的表
: 不过我对你的试验很感兴趣,你是10k table join 10k table吗?
: 10k vs. 100m性能应该有很大区别呀
:
: they

avatar
c*d
10
没用过postgre
postgre里能看执行计划吗,看看有没有使用索引,哪个是driving table

【在 a*******s 的大作中提到】
: table1 10k
: id not index or index
: table2 100m
: id not indexed
: where table1.id = table2.id
: They are almost the same. Database is postgre. Not sure if postgre will
: index the table1.id in the memory.

avatar
c*d
11
在Oracle 8i,9i里面,肯定有影响
没有statistic,engine无法决定cost,只能用rbo

【在 B*****g 的大作中提到】
: 如果table没有statistic,会不会有影响?
avatar
a*s
12
just test.
postgre will sort the table1.id first, the rest is the same.
Both scan against the small table id.

【在 c*****d 的大作中提到】
: 没用过postgre
: postgre里能看执行计划吗,看看有没有使用索引,哪个是driving table

avatar
k*e
13
postgres也能看执行计划
另外,statistics非常重要

【在 c*****d 的大作中提到】
: 没用过postgre
: postgre里能看执行计划吗,看看有没有使用索引,哪个是driving table

avatar
c*d
14
hehe,才发现ambitious理解错我的意思了
“不过我对你的试验很感兴趣,你是10k table join 10k table吗?
10k vs. 100m性能应该有很大区别呀”
我是说如果1个10k table join 另一个10k table
有index,时间是10k
没有index,时间是100m,性能有很大区别
这是我在oracle上做出的结果,
==no index,nest loop join=====
call count cpu elapsed disk query current rows
avatar
c*d
15
刚才的试验中,如果有statistic,不管有没有索引,Oracle都使用hash join
== with index ================================
call count cpu elapsed disk query current rows
avatar
c*d
16
编辑了半天,累死我了
这个bbs怎么贴代码才不会出乱码呢?
avatar
B*g
17
co-ask

【在 c*****d 的大作中提到】
: 编辑了半天,累死我了
: 这个bbs怎么贴代码才不会出乱码呢?

avatar
u*u
18
There is NO fixed standard to use index or not.
As the data keep changing, you may find your old query becomes slow. Adding
a index will help your query in most cases.
However, too many indexed columns will NOT help your DML (inert/update/
delete).
Need watch the performance to see whether the index is helpful or not.
Thanks!
美国老土
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。