index 查询

枫继续吹 2011-10-23 10:20:05
比如现在有表:
PRODUCT(name, manufacturer, price, description, quality, mdate)

其中(name, manufacturer) is a primary key

那么:
SELECT *
FROM PRODUCT
WHERE name = 'computer'and manufacturer = 'IBM';
这个会按index查询吧,

那如果我把and两边的位置调换一下呢:
SELECT *
FROM PRODUCT
WHERE manufacturer = 'IBM' AND name = 'computer';
这样还会按index查询吗?
...全文
99 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
007-x 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xiaobn_cn 的回复:]
引用 3 楼 yixilan 的回复:
但是如果这样就不按索引了:
WHERE name = 'computer';
或者
WHERE manufacturer = 'IBM';


当楼主的索引是name + manufacturer时:
where name = '' and manufacturer = '' 走索引
where manufacturer = '' and ……
[/Quote]
+1
xiaobn_cn 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yixilan 的回复:]
但是如果这样就不按索引了:
WHERE name = 'computer';
或者
WHERE manufacturer = 'IBM';
[/Quote]

当楼主的索引是name + manufacturer时:
where name = '' and manufacturer = '' 走索引
where manufacturer = '' and manufacturer = '' 走索引
where name = '' 走索引
where manufacturer = '' 不走索引

当使用复合索引的前几列进行查询时(必须是从第1列开始),仍然是走索引的。
yixilan 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 lijialinapple 的回复:]
比如现在有表:
PRODUCT(name, manufacturer, price, description, quality, mdate)

其中(name, manufacturer) is a primary key

那么:
SELECT *
FROM PRODUCT
WHERE name = 'computer'and manufacturer = 'IBM';
这个……
[/Quote]
但是如果这样就不按索引了:
WHERE name = 'computer';
或者
WHERE manufacturer = 'IBM';
yixilan 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 lijialinapple 的回复:]
比如现在有表:
PRODUCT(name, manufacturer, price, description, quality, mdate)

其中(name, manufacturer) is a primary key

那么:
SELECT *
FROM PRODUCT
WHERE name = 'computer'and manufacturer = 'IBM';
这个……
[/Quote]
都走索引啊。。。
BenChiM888 2011-10-24
  • 打赏
  • 举报
回复
1、走不走索引要看执行计划,oracle认为不走索引比走索引快的时候就不会走索引。
2、从基于rule的执行计划考虑
你建立的索引是符合索引 (name, manufacturer) is a primary key
name这个列是引导列,只要你的where条件中用到了这个列,那么就会走索引。

同样的道理 (col1,col2,col3) 这也叫符合索引
只要where 条件用到col1 那么这个索引就会走。
如:where col1=xxx and col3=xxx 或者
where col1=xxx and col2=xxx 或者
where col1=xxx and col2=xxx and col3=xxx
merrill 2011-10-24
  • 打赏
  • 举报
回复
这些我建议你查看下SQL执行计划
dawugui 2011-10-23
  • 打赏
  • 举报
回复
如果对name+manufacturer建立索引,而不是主键,
WHERE name = 'computer'and manufacturer = 'IBM';这个会按index查询.

WHERE manufacturer = 'IBM' AND name = 'computer' 这个不会按index查询.


17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧