怎么样建索引更合理?(回答有分)
两个查询语句
"SELECT COUNT(*) count1
FROM table1 t1
WHERE t1.id > = 20070625000000000000
AND t1.pid = '10 '
AND t1.oper_id = '2177 ' "
"SELECT COUNT(*) count2
FROM table1 t1
WHERE t1.id > = 20070625000000000000
AND t1.telePhone = '88888888 ' "
对表table1 的索引才更合理更科学,理由是?
谢谢,
------解决方案--------------------从这条语句来分析:
可以在 id 上建立索引即可
------解决方案--------------------首先要看這個表的資料量大不大,如果很小,就沒必要建index,因為full scan速度會更快.
大資料的情況如果單純為了這兩個語句的執行效率,可以建兩個Index
index1:id,pid,oper_id
index2:id,telePhone
此外要根據平時有哪些常用的語句來建
一般index數量不要超過子段數的20%效能比較好
------解决方案--------------------如果数据是海量,以你给出的语句,其中关联的是三个字段,
建议考虑三个字段哪个字段变化大,哪个字段变化小,
如果id指的是流水号,通常流水号都是唯一的,也就是与其它记录相异,
即使建index也index也会较大,可以考虑相异值更小一点的,
由语句还是建pid,oper_id为好,个人意见,尽供参考.
------解决方案--------------------如果t1.id > = 20070625000000000000 返回的数据量是很大的,不建议在此列建索引(只针对当前表)
如果t1.pid = '10 ' 返回的数据量比较大也不适合建索引
oracle的优化是基于成本的,有时候数据量的不同,或者你检索出来数据量的不同都会影响oracle的优化方案.
看样子id应该是主键,不用建索引,如果是我的话再把经常查询的列建一个索引,再针对具体的查询情况再调整查询语句,例如,强制使用某个列的索引.
------解决方案--------------------主鍵和外鍵在建表的時候都會自動加上索引。其它的字段主要看在where字句中出現的頻率。設定了索引還要看是否能起效。關鍵是實驗。多用用Explain plan看看SQL的執行計劃。