在下面的问题上需要帮助。
我需要从每天插入大量数据的表中删除行,我已经编写了一个程序,根据有索引的列删除行,对我来说应该足够了但我的同事建议我使用日期列来删除数据,因为这将使用日期分区(分区基于日期)。
我怀疑删除语句会更快删除数据。
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
请告知。
由于
答案 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
答案 1 :(得分:0)
如果文件名是实际改进表格导航的索引,我认为使用第一个文件名会更快。