我有一个看起来像
的主表 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语句的脚本,如果它改变了什么。
答案 0 :(得分:0)
考虑使用视图:
CREATE VIEW completeFileSystem AS
SELECT ...
FROM filesystem
JOIN users USING (uid)
JOIN groups USING (gid);
这通常足够快。 (您可以通过制作两个查找表WITHOUT ROWID tables来加快速度。) 如果主表有很多行,那么通过仅存储用户/组ID而节省的空间将减少I / O,从而可以补偿进行连接的工作量。
对于您的特定应用来说,这实际上是否足够快,您必须自己衡量。