这怎么样
=IF(ISNA(INDEX(Sheet5!$A$4:$AG$30,MATCH($C$25,Sheet5!G4:G30,0),2)),"",INDEX(Sheet5!$A$4:$AG$30,MATCH($C$25, Sheet5!G4:G30,0),2))
与此不同吗?
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
col1 VARCHAR(50) NOT NULL,
col2 VARCHAR(50) NOT NULL,
col3 DOUBLE PRECISION NULL,
UNIQUE(col1, col2)
);
据我了解,两个命令都会在两列上生成一个索引,以强制执行唯一约束,但顺序不同。
因此,无论哪种情况,我都不需要生成单独的索引来加快此类查询的速度。
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
col1 VARCHAR(50) NOT NULL,
col2 VARCHAR(50) NOT NULL,
col3 DOUBLE PRECISION NULL,
UNIQUE(col2, col1) -- reversed column ordering
);
但是,如果以后的查询还包括仅按“ col2”列进行查询(如后一种形式),则首选使用后者,因为索引仍然可以使用吗?
SELECT id, col3 FROM foo WHERE col1 = 'stack' AND col2 = 'overflow'
答案 0 :(得分:0)
如果您希望将索引用作部分索引,则顺序很重要。例如,假设您在(col1, col2)
上有一个唯一索引,并且想优化以下查询:
SELECT col1, col2 FROM foo WHERE col1 = 'stack';
此处仍可以使用(col1, col2)
上的索引,因为出现在col1
子句中的WHERE
是索引的最左侧部分。如果您在(col2, col1)
上定义了唯一约束,则该索引不能用于此查询。