2015-07-12 75 views
0

如果我创建这样一个表:sqlite:如果我已经有多列主键,我需要一个索引吗?

CREATE TABLE IF NOT EXISTS Tiles 
(
    X INTEGER NOT NULL, 
    Y INTEGER NOT NULL, 
    Zoom INTEGER NOT NULL, 
    Type INTEGER NOT NULL, 
    Tile BLOB NULL, 
    PRIMARY KEY(X, Y,Zoom,Type) 
) 

我是否还需要添加一个(X, Y, Zoom, Type)指数,使搜索快?

我的搜索查询是这样的:

SELECT Tile 
FROM Tiles 
WHERE X = %1 AND Y = %2 AND Zoom = %3 AND Type = %4 

我插入查询是这样的:

REPLACE INTO Tiles(X, Y, Zoom, Type, Tile) 
VALUES(?, ?, ?, ?, ?) 
+0

索引不会帮助查询规划器,因为主索引(PK是隐式索引)被覆盖。 – user2864740

+0

使用[EXPLAIN QUERY PLAN](http://www.sqlite.org/eqp.html)检查查询是否使用索引。 –

回答

1

在SQLite的,当你声明一个主键自动创建一个索引,例如见documentation,所以没有必要创建另一个索引。

相关问题