因此只好建立函数索引来完成。
环境如下:
select count(*) as TJ, FAULT_TYPE, decode(FAULT_STYLE, null, 0, fault_style) fault_style
FROM RM_MALFUNCTION_FAULT
WHERE to_char(notice_date, 'yyyy-mm') = to_char(sysdate, 'yyyy-mm')
group by fault_type, fault_style
虽然在notice_date上建立了索引,但是因为使用函数转换,无法使用索引,还是全表扫描。
最后只好在此字段上建立函数索引: to_char(notice_date,'yyyy-mm')
要使用函数索引,必须条件:
(1)
必须拥有QUERY REWRITE(本模式下)或GLOBAL QUERY REWRITE(其他模式下)权限。
(2)
必须使用基于成本的优化器,基于规则的优化器将被忽略。
(3)
必须设置以下两个系统参数:
1.QUERY_REWRITE_ENABLED=TRUE
2.QUERY_REWRITE_INTEGRITY=TRUSTED
可以通过alter system set,alter session set在系统级或线程级设置,也可以通过在init.ora添加实现。
基于函数的索引,类似于普通的索引,只是普通的索引是建立在列上,而它是建立在函数上。当然这回对插入数据有一定影响,因为需要通过函数计算一下,然后生成索引。但是插入数据一般都是少量插入,而查询数据一般数据量比较大。为了优化查询速度,稍微降低点插入速度是可以承担的。
建立函数索引后,上述SQL,执行起来效率非常不错。
函数索引还有一个功能,只对部分行建立索引。假设有一个很大的表,有一列叫做FLAG,只可能取Y和N。假设大部分数据是Y,小部分数据是N,我们需要将N修改成Y。如果建立一个普通索引,这个索引会非常大,而且将N修改成Y的时候,维护这个索引开销会很大。不过这个表听起来比较适合位图索引,但这是一个事物系统(OLTP),可能有很多人同时插入记录,或者进行修改。那么位图索引也不适合。所以,如果我们只是在值为N的行上建立索引,就比较好办了。
只在值为N的行建立索引SQL:create index flag_index on big_table(case flag when 'N' then 'N' end);这样一个索引大小会大大降低,而且维护成本也会很低的。前提是我们只对值为N的行感兴趣。
已有 0 人发表留言,猛击->>这里<<-参与讨论
ITeye推荐
- —软件人才免语言低担保 赴美带薪读研!—
文本框给定一个onblue事件,按钮给定一个onclick事件,
这样的话,当点击按钮之后,文本框失去事件触发,但是按钮的onclick事件却触发不了
原因如下:
onclick 相当于 在某一元素上触发了 onmousedown(即鼠标按下)后 任然在该元素 上 触发了onmouseup(鼠标按键弹起)才触发 onclick;
对于某元素A 绑定了 click事件 并同时对另外 的元素B 绑定onblur事件, 这时候,当在A上mousedown后,即触发了B元素的onblur事件,该事件函数执行后的效果是 改变了DOM结构,使得鼠标已经不在在元素A之上。 这时鼠标任然没有mouseup ,在mouseup之后,以为会触发click事件,实际上却不能触发。
解决方法:
在按扭上加个onmouseover函数,里面的代码是把焦点移到按扭上,这样很合乎情理,顺便加个鼠标放到提交按扭上时按钮样式变化的特效就更完美了。
已有 0 人发表留言,猛击->>这里<<-参与讨论
ITeye推荐
- —软件人才免语言低担保 赴美带薪读研!—
提供一个将表单数据转为json对象,再转为字符串,提交到后台,后台就可以将数据转为json对象,方便操作,假如有用到json作为数据处理手段的话。希望大家可以用到!(不能直接套用的话,用浏览器js调试工具调试下,就行了)
要用到的包:json2.js,jquery(可以百度);
var dataVo = $("#submitForm").serializeArray();
var dataJson = convertToJson(dataVo);
dataVo = JSON.stringify(dataJson);
/**
* 将表单对象转为json对象
* @param formValues
* @returns
*/
function convertToJson(formValues) {
var result = {};
for(var formValue,j=0;j<formValues.length;j++) {
formValue = formValues[j];
var name = formValue.name;
var value = formValue.value;
if (name.indexOf('.') < 0) {
result[name] = value;
continue;
} else {
var simpleNames = name.split('.');
// 构建命名空间
var obj = result;
for ( var i = 0; i < simpleNames.length - 1; i++) {
var simpleName = simpleNames[i];
if (simpleName.indexOf('[') < 0) {
if (obj[simpleName] == null) {
obj[simpleName] = {};
}
obj = obj[simpleName];
} else { // 数组
// 分隔
var arrNames = simpleName.split('[');
var arrName = arrNames[0];
var arrIndex = parseInt(arrNames[1]);
if (obj[arrName] == null) {
obj[arrName] = []; // new Array();
}
obj = obj[arrName];
multiChooseArray = result[arrName];
if (obj[arrIndex] == null) {
obj[arrIndex] = {}; // new Object();
}
obj = obj[arrIndex];
}
}
if(obj[simpleNames[simpleNames.length - 1]] ) {
var temp = obj[simpleNames[simpleNames.length - 1]];
obj[simpleNames[simpleNames.length - 1]] = temp;
}else {
obj[simpleNames[simpleNames.length - 1]] = value;
}
}
}
return result;
}
已有 0 人发表留言,猛击->>这里<<-参与讨论
ITeye推荐
- —软件人才免语言低担保 赴美带薪读研!—