oracle中关于clob类型字段的查询效率问题
其中表p_invoice_detail 中大概34W条数据,p_invoice_inform_order_detail中大概14W条数据,其它表中数据不超1W条,于是博主各种折腾,建索引,调整连接顺序等,都不起作用,博主用的navicat,每次查询我的naviicat就罢工,报unknown internal error?(A70529121901)? bad? allocation,没办法,只好一个表一个表的排除,最后发现,左连接p_invoice_inform_order_detail 表后就会出现上述问题,其它表都没事,于是博主单独查询这张表发现也很慢: ? ? ?用了37.704s只查询出8300条记录(表中共有约14W条数据),但是同样的查询有34W条数据的表p_invoice_detail却用了12.640s就全部查询出来了,博主就奇怪了,于是一个字段一个字段的试,终于发现是表p_invoice_inform_order_detail中的dispose_num字段导致的,后来发现该字段为clob类型,问题定位就好说了,上网查询发现将clob字段转为string类型再查询出来会提高效率,于是照做:将最开始的iiod.dispense_num修改为dbms_lob.substr(iiod.dispense_num,dbms_lob.getlength(iiod.dispense_num),1) dispense_num: SELECT pid.id, dbms_lob.substr(iiod.dispense_num,1) dispense_num, iiod.package_deal_code iiod_package_deal_code,it.tax_amount it_tax_amount FROM p_invoice_detail pid LEFT JOIN s_materials m ON pid.materials_id = m.id LEFT JOIN p_invoice_inform_order_detail iiod ON pid.inform_order_detail_id = iiod.id LEFT JOIN p_invoice_inform_order iio ON iiod.invoice_inform_order_id = iio.id LEFT JOIN p_invoice i ON pid.invoice_id = i.id LEFT JOIN p_invoice_tax it ON i.id = it.invoice_id LEFT JOIN s_supplier s ON s.id = i.supplier_id WHERE i.is_deleted = 0 ? (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |