我有一个100 K行的表DB。大约有30列,其中28列是varchars /微文本,其中一列是int主键,其中一列是blob。
我的问题是,在性能方面,是否最好将blob从表的其余部分中分离出来,并使用外键约束将它们存储在自己的表中?
该表最终将被转换为iOS核心数据的sqlite持久存储,许多搜索/过滤将基于NSPredicate为较轻的varchar列进行。
对不起,如果这太主观了,但我认为有一个推荐的方法。
谢谢!
发布于 2014-02-13 17:59:13
这完全取决于数据的使用。
如果每次查询该表时都需要数据,那么它的单独表(只要blob数据在每一行中都是唯一的--即“只要数据库是规范化的”)就没有区别。
如果您不需要blob数据,而只需要来自其他列的元数据,那么可能会有一个速度奖励,用于查询blob是否有自己的表。查询blob数据要慢一些,因为您需要查询bowth表。
通常的方法不是在数据库中存储任何blob数据(至少不是巨大的数据),而是将二进制数据存储到文件中,而是在数据库中使用fiel路径。这是推荐的,因为二进制数据很可能不会从DBMS (不可索引、可排序、可群组,.)中受益,所以在文件中存储它没有缺点,而数据库没有针对二进制数据进行优化(同样,它也不能对它做太多事情)。
发布于 2014-02-13 18:00:20
如果您执行SELECT * FROM table (如果实际上不需要BLOB字段,则不应该这样做),那么查询将更快,因为在这种情况下,使用BLOB的页面不会被触及。
如果您执行频繁的SELECT f1, f2, f3 FROM table (所有字段都是非BLOBS ),那么是的,在一个单独的表中存储BLOBS将使查询速度更快,原因是相同的原因-- MySQL将不得不读取更少的页面。
但是,如果频繁地选择BLOB,那么单独保留它就没有意义了。
发布于 2014-02-13 17:56:42
Blobs存储在磁盘上,只有存储点在Mysql中的内存中。用外键将其移动到另一个表将不会明显地帮助您的性能。我不知道sqlite的情况是否如此。
https://stackoverflow.com/questions/21761790
复制相似问题