我有2个表,比如table1和table2,样本数据如下:
Table1 (User_id)
--------------------
X1011
X1175
X1234
Table2 (User_id)
-----------------
1011
1175
1234
我需要编写一个带有where条件的查询,我将比较这两个值。一般而言,下列哪一项更好/可取,为什么?
1. WHERE TABLE1.USER_ID = 'X' || TABLE2.USER_ID;
2. WHERE TABLE1.USER_ID = CONCAT ('X', TABLE2.USER_ID);
3. WHERE SUBSTR(TABLE1.USER_ID,2) = TABLE2.USER_ID;
两列都已编入索引。
答案 0 :(得分:2)
回答性能问题的方法是测试数据和系统上的不同选项。
除了对执行计划的影响之外,我不希望这些表现完全不同。在函数中包装列时,会影响执行计划。首先它影响索引的使用,其次它影响用于选择各种底层算法的统计数据。函数的实际执行(很可能)影响很小。
我建议你创建一个功能索引。例如,使用第三个例子:
create index idx_table1_f1 on table1(substr(user_id, 2));
或者第二个例子:
create index idx_table2_f1 on table2(CONCAT('X', TABLE2.USER_ID));
除了修复数据结构以使密钥真的相同之外,这可能是您提高性能的最佳步骤。
答案 1 :(得分:1)
实施例1和2是等同的。选择介于1和3之间取决于表格的前导和连接中的前导(如果您要使用连接)。无论如何给出你将要使用的实际查询,至少,这些表的行数将有助于给你答案。
而且,你可以尝试一起使用1和3。因此,优化器可以根据统计信息更改最佳访问路径。