
[英]phpmyadmin on cpanel is too slow when a table gets too big. How do others deal with this?
[英]SQLite gets too slow and big with tag map
在阅读了许多关于优化数据库的帖子后,我决定重写我的 sqlite 数据库。 从.csv 创建的数据库,该文件列表大小约为 2700 MB。 为了测试,我只使用了 45 MB。
文件表:
CREATE TABLE 'files' (
'file_id' INT not null PRIMARY KEY,
'name' TEXT,
'ext' TEXT,
'category' INT,
'size' INT,
'date' INT
'width' INT,
'height' INT,
'status' INT,
'locked' INT,
'type' INT)
标签:
CREATE TABLE 'tags' (
'id' INT not null PRIMARY KEY,
'name' TEXT,
'category' INT,
'file_count' INT,
'listener' INT)
标签和文件对:
CREATE TABLE 'tagmap' (
'file_id' INT,
'tag_id' INT,
FOREIGN KEY('id') REFERENCES posts(id))
我得到的简单最快的请求:
SELECT files.*,(select group_concat(name) from tags
where tags.id in (
select tag_id from tagmap where id=files.file_id
)) as tags FROM posts where files.id >3000 limit 100
*我需要在底部回答的问题
大多数列的第一个问题是 integer 并且在导入 csv 后,数据库变得很大(大约 65-75 Mb)。 大小不关心我,但只有大的 integer 是 id,最大的文本是之后解析的标签(测试 csv 155 000 行,原始文件约 550 万)。
第二个问题标签存储为字符串我决定使用多对多系统来提高性能。 创建标签 map 后,系统数据库增长更多(使用VACUUM
和REINDEX
后大约 140MB),尽管有很多重复标签。 从原始文件标签表中提取的所有内容仅消耗 21 Mb 并包含 862 196 行。 但是标签 ID 和文件 ID 对占用大约 60 Mb 和 5 499 514 行(有些文件有 3-7 个标签,有些是 30-50)。 如果多次使用相同的标签,文件大小如何变得如此之大? 有没有更有效的方法来存储 integer 对。
第三个问题它变慢了。 无索引约 15 秒,有索引约 1-3 秒。 不是那么慢,但文件更大,我的电脑控制台看起来像冻结了。 旧的 sqlite 数据库在同一个表中的标签比LIKE
更快。
我想知道:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.