SQLite内部将2个表连接成一个主表

时间:2017-08-21 19:01:15

标签: python sql sqlite

我有一个看起来像

的主表
    CREATE TABLE IF NOT EXISTS filesystem (
    inode           INTEGER PRIMARY KEY, 
    uid             TEXT, 
    gid             TEXT, 
    type            TEXT,
    pathname        TEXT,
    parentinode     INTEGER,
    FileCounter     INTEGER DEFAULT 0,
    DirCounter      INTEGER DEFAULT 0,
    TotalByteSum    INTEGER DEFAULT 0 )

和2个子表,看起来像:

    CREATE TABLE IF NOT EXISTS groups (
    gid         TEXT PRIMARY KEY, 
    groupname   TEXT

    CREATE TABLE IF NOT EXISTS users (
    uid         TEXT PRIMARY KEY,
    username    TEXT

目前我正在使用:

CREATE TABLE completeFileSystem AS SELECT filesystem.inode, users.username, groups.groupname, filesystem.type,  filesystem.pathname,filesystem.parentinode, filesystem.FileCounter, filesystem.DirCounter, filesystem.TotalByteSum
FROM filesystem 
INNER JOIN users ON filesystem.uid = users.uid 
INNER JOIN groups ON groups.gid = filesystem.gid

创建一个新表,导致我的db文件大于所需的数据。

我想将filesystem.uid = users.uid和filesystem.gid = groups.gid内部加入到文件系统表中。这在SQLite中可行吗?我正在使用Python来编写这些sql语句的脚本,如果它改变了什么。

1 个答案:

答案 0 :(得分:0)

考虑使用视图:

CREATE VIEW completeFileSystem AS
SELECT ...
FROM filesystem 
JOIN users USING (uid)
JOIN groups USING (gid);

这通常足够快。 (您可以通过制作两个查找表WITHOUT ROWID tables来加快速度。) 如果主表有很多行,那么通过仅存储用户/组ID而节省的空间将减少I / O,从而可以补偿进行连接的工作量。

对于您的特定应用来说,这实际上是否足够快,您必须自己衡量。