我試圖將文件存儲在數據庫中,並查詢文件夾的數量和大小。我的表格如下。Mysql性能:如何在數據庫中存儲文件樹?
CREATE TABLE `files` (
`permission` varchar(10) DEFAULT NULL,
`size` int(11) NOT NULL DEFAULT '0' COMMENT 'filesize',
`date` varchar(20) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
`time` varchar(20) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
`path` varchar(1024) CHARACTER SET latin1 COLLATE latin1_general_ci DEFAULT NULL,
KEY `path` (`path`(10)),
KEY `path_2` (`path`(4)),
KEY `size` (`size`)
) ENGINE=MyISAM
我的文件夾就像「????/some string」。我有大約38,333,316條記錄。 簡單查詢大約需要22秒。
mysql> select count(*),sum(size)/(1024.0*1024.0*1024.0) from files
where path like '5___%' and size != 2048;
+----------+----------------------------------+
| count(*) | sum(size)/(1024.0*1024.0*1024.0) |
+----------+----------------------------------+
| 7900746 | 9019.6535 |
+----------+----------------------------------+
1 row in set (22.89 sec)
mysql> explain select count(*),sum(size)/(1024.0*1024.0*1024.0)
from files where path like '5___%' and size != 2048;
--+-----------+-----+----+-------------- -+----+-------+----+--------+-----------
id|select_type|table|type|possible_keys |key |key_len|ref |rows | Extra
--+-----------+-----+----+----------------+----+-------+----+--------+-----------
1| SIMPLE |files| ALL|path,path_2,size|NULL|NULL |NULL|38333316|Using where
--+-----------+-----+----+----------------+----+-------+----+--------+-----------
1 row in set (0.23 sec)
有沒有辦法優化查詢,我可以加快以某種方式? 通常我希望問類似這樣的一些問題:
path like '5___%' and size != 2048
path like '3___%' and size != 2048
path like '45__%' and size != 2048
感謝阿曼。
你需要的文件,真正是不是2048的大小,也可以是大於2048小於2048,但小嗎?如果你的查詢大小大於2048,會顯着加快速度。另外,你是使用默認的MySQL配置還是試圖調整它? – 2011-04-28 10:42:18
文件系統在存儲文件樹方面非常出色;) – 2011-04-28 10:46:03
@Peter G .:目錄是nfs,每個目錄都掛載-hs 5?花費約20-25分鐘。 – Arman 2011-04-28 10:58:04