delete语句中的Date列以及索引列

时间:2014-07-11 09:00:52

标签: sql plsql oracle11g

在下面的问题上需要帮助。

我需要从每天插入大量数据的表中删除行,我已经编写了一个程序,根据有索引的列删除行,对我来说应该足够了但我的同事建议我使用日期列来删除数据,因为这将使用日期分区(分区基于日期)。

我怀疑删除语句会更快删除数据。

E.g

1. Column name :- FILE_NAME (Having index)
            delete from table_name where column_name1=file_name
2. Column name1 :- FILE_NAME (HHaving index) and column name2:- TXN_DATE (no index, Partition is on this column)
            delete from table_name where column_name1=file_name and txn_date=date_value

请告知。

由于

2 个答案:

答案 0 :(得分:1)

是的,你的同事是对的。第二个查询会更快。

该过程称为partition pruning。使用该列,基于创建的分区将自动仅访问数据可用的必要分区。

如果您可以确定date_value的分区名称,也可以直接引用该分区,如

DELETE FROM table_name 
PARTITION (partition_date_value) 
WHERE column_name1=file_name;

<强>参考

Examples for DELETE on Oracle Database SQL Language Reference

Partition Pruning

Another Partition Pruning website

答案 1 :(得分:0)

如果文件名是实际改进表格导航的索引,我认为使用第一个文件名会更快。