积木首页 - 学院 - 软件测试 - 技术百科 - 问答 - 黄页 - 手册 - 站长工具 - 社区
登录 | 注册
积木技术社区 » SqlServer » 如何使用索引
打印 楼主:坏坏孩子气 发表于 2010-08-18 06:39 [回复16次/有效12个,浏览177次]

如何使用索引

SQL code
CREATE TABLE [dbo].[TB](
[companyCode] [char](2) NOT NULL,
[b] [varchar](50) NOT NULL,
[c] [varchar](50) NOT NULL,
[d] [varchar](50) NULL,
CONSTRAINT [PK_TB] PRIMARY KEY CLUSTERED
( [companyCode] ASC,
[b] ASC,
[c] ASC
) ON [PRIMARY]
select * from TB where [companyCode]='yy' and b in('XX','ZZ')
能使用到索引吗?
select * from TB where [companyCode]='yy' and (b='XX'or b='ZZ')
能使用到索引吗?如果不能使用到索引.去掉一个主键字段c,重新生成索引,是否就能使用到索引了呢?
如果能使用索引,跟
select * from TB where [companyCode]='yy' and b='XX'
union all
select * from TB where [companyCode]='yy' and b='ZZ'
的效率是不是一样?
最近接触到一些进销存系统
发现[companyCode]在同一表中都为同一值'yy'.
这样建立的意义是什么?
如果[companyCode]为同一值,那:
select * from TB where b='XX'
或者
select * from TB where c='CC'
也就能直接使用到索引了吗?
如果为同一值:
存在表TB1,TB2 索引结构类似TB
SELECT * FROM TB1 INNER JOIN TB2 on TB1.b=TB2.b where TB1.b='XX'
是否也能使用到该索引?
是否必须加上:
SELECT * FROM TB1 INNER JOIN TB2 on TB1.companyCode=TB2.companyCode and TB1.b=TB2.b where TB1.b='XX'
或者是
SELECT * FROM TB1 INNER JOIN TB2 on TB1.companyCode=TB2.companyCode and TB1.b=TB2.b where TB1.companyCode='yy' and TB1.b='XX'
才能使用到索引?
3楼 发表于 2010-08-18 07:41
实际是一个问题,如果一个索引的第一个字段重复率很高,那这个索引效果可能就很差,应该考虑把这个字段调整到这个索引的最后一个字段
如果一个索引的一个字段固定,那这个字段就应该从这个索引排除
4楼 发表于 2010-08-18 08:46
这篇文章不错,看看基本就清楚了。SQL优化-索引
5楼 发表于 2010-08-18 09:20
恩 自己看执行计划
6楼 发表于 2010-08-18 10:05
学习学习,索引搞得我焦头烂额
7楼 发表于 2010-08-18 11:33
可以肯定的是 加索引会让你的查询变得更加有效率
9楼 发表于 2010-08-18 14:43
可是实际环境可能是这样的,如果一个聚集索引(a,b,c,d)我们往往都只是要一个字段条件查询 如: select * from TB where b='XX'
或者 select * from TB where c='XX'.于是产生了这样的想法,如果我们想索引建的最少,而又能使用到聚集索引.那么增加一个字段a来做索引头.并且为同一值.
只要我们每次查询的时候增加一个字段 select * from TB where a='YY' and b='XX' 或者 select * from TB where a='YY' and c='XX'
这样是否就能保证到每次使用到聚集索引了,不知道这样理解对不?
还有
SELECT * FROM TB1 INNER JOIN TB2 on TB1.companyCode=TB2.companyCode and TB1.b=TB2.b where TB1.companyCode='yy' and TB1.b='XX'
这个好像是可以使用到索引的吧?
10楼 发表于 2010-08-18 16:13
向海爷学习.
11楼 发表于 2010-08-18 17:55
好多问题,你可以选中要执行的语句,然后ctrl+L看看执行计划就知道有没有用到索引了,最直观的方法,用事实说话。
12楼 发表于 2010-08-18 18:45
ctrl+l看下执行计划..
13楼 发表于 2010-08-18 20:21
[b][/b]
14楼 发表于 2010-08-18 21:16
向梁哥學習.
15楼 发表于 2010-08-18 21:49
SQL code
ctrl+L
标题:
内容:

PHP: PHP技巧 - PHP基础 - PHP实例 - PHP错误代码 - 正则表达式 - 热门脚本语言: DOS命令 - vbs - CSS/HTML - python - perl - ruby - shell编程 - Powershell

JS: node.js - JS基础 - extjs - jQuery - JavaScript技巧

网址导航成语大全积木 TinyMCE 服务邮箱: Gimoohr(#)gmail.com
Copyright © 2008 Gimoo.Net  京ICP备05050695号