首页 新闻 会员 周边 捐助

菜鸟一枚,项目里有lock,经常死锁,数据库的索引有用吗?

0
悬赏园豆:10 [待解决问题]

create index indexname on tablename(字段),就这样建索引有用吗?怎么查询呢?

灬丶的主页 灬丶 | 初学一级 | 园豆:3
提问于:2016-11-03 19:23
< >
分享
所有回答(3)
0

简单的理解索引就是字典前面的目录,如果没有索引那么查找数据就需要扫描整个数据集,相反如果查询的时候条件能够使用上索引,也就是能够用上目录的话,那么就不需要对整个结果集进行扫描,而只需要根据索引定位到数据做后续操作。

就你的例子中的语句,那么当select * from tb where columwithindex=@para的时候就可以用上索引(实际是否用上还和其他相关,比如数据量,但一般情况下这样是可以走索引的)

死锁和索引这个没太大关系,有些时候索引可能导致死锁。针对死锁这个只能具体分析了。

 

Daniel Cai | 园豆:10424 (专家六级) | 2016-11-03 20:41

那数据量小的时候,这种写法有用吗?

支持(0) 反对(0) 灬丶 | 园豆:3 (初学一级) | 2016-11-03 21:28

@灬丶: 其他的db不清楚,但mssql在数据量小的情况下可能会选择不走索引。但这些和死锁无关。

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-11-03 23:08

@Daniel Cai: 那经常遇到死锁怎么办

支持(0) 反对(0) 灬丶 | 园豆:3 (初学一级) | 2016-11-03 23:11

@灬丶: 这个不太好查,找dba查log是一条路。如果针对表的操作就那么几个可以拿出来单独看下。

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-11-04 09:37

@Daniel Cai: 能不能说通俗点,小弟理解不了!!!1

支持(0) 反对(0) 灬丶 | 园豆:3 (初学一级) | 2016-11-04 09:38

@灬丶: 第一种就是找dba慢慢去查db的log,这种估计dba都会闲麻烦,但在一些场景下这种也是没有办法的办法。

另一种是当如果你被死锁的地方对应的表对应的操作不多的情况下,翻下代码,把所有相关的语句全部拿出来检查,通过分析去找到导致死锁的两个语句。

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-11-04 10:11

@Daniel Cai: 如果是操作的人过多而导致的,这样也行?

支持(0) 反对(0) 灬丶 | 园豆:3 (初学一级) | 2016-11-04 13:44

@灬丶: 死锁和请求频率没关系,如果在不会发生死锁的语句上频率再高也不会死锁。而会发生死锁的语句上,频率高只是加大了出现的可能性

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2016-11-04 14:02
0

具体情况具体分析.设计业务实现时就要考虑死锁..

吴瑞祥 | 园豆:29449 (高人七级) | 2016-11-04 08:15

好像是导出表格

支持(0) 反对(0) 灬丶 | 园豆:3 (初学一级) | 2016-11-04 08:23
0

创建index能够减少索引,但是,不能避免,要想避免索引,要从修改语句开始分析,避免锁升级

悦光阴 | 园豆:2251 (老鸟四级) | 2016-11-04 11:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册