我们正在使用PostgreSQL v8.2.3。

涉及桌子: 员工Emaillist.

Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6)
Table 2: EMAILLIST (email)

2表的加入方式是,如果员工1 email1或雇员。

SELECT employee.email1, employee.email2,
        e1.email IS NOT NULL AS email1_matched, e2.email IS NOT NULL AS email2_matched
   FROM employee
   LEFT JOIN emaillist e1 ON e1.email = employee.email1
   LEFT JOIN emaillist e2 ON e2.email = employee.email2
 WHERE e1.email IS NULL OR e2.email IS NULL

柱子 EMAIL 那是 Varchar(256)EMAILLIST 表格为索引。现在,响应时间为14秒。

表计数统计:目前,员工拥有165,018张记录和Emaillist拥有1,810,228个记录,并且两张桌子预计将来会增长。

  1. 这是索引varchar列的好主意/方法吗?这个问题立即引起我的脑海,因为我们在应用程序中没有索引过varchar列的原因。专家对此的建议/建议非常感谢。
  2. 有了当前的查询和索引,响应时间为14秒是合理的,还是有进一步调整的范围?其他用户的实时体验/意见是基于这种表尺寸和响应时间的什么?

笔记: 我的实际需求/用例详细说明 这里.

有帮助吗?

解决方案

如果您要根据它进行查询,则索引Varchar列没有错。但是,请记住,某些索引有限制以及它们在单个字段中可以索引多少。示例您无法索引可以包含无限量文本的列。但是,您应该能够无问题地对Varchar(256)进行索引。尝试一下,并分析查询性能的改进,以查看是否有帮助。

其他提示

这样的varchar列没有问题

可能会成为问题的地方是您将VARCHAR列作为十亿行表中的FK。然后,您将拥有PK和FK的替代密钥,但是您仍然需要自然VARCHAR键上的唯一约束/索引。

您的表格很小,性能可能与或子句有关。不幸的是,无论您如何构建查询,都适用同样的问题(我对postgressql不太熟悉,以至于很抱歉)

尝试摆脱查询的“或e2.email是无效的”部分,看看它运行的速度。如果运行速度更快,您可能可以通过“联合”更快地运行它

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top