将Blob存储在另一个表中或使用mysql barracuda

时间:2017-09-14 16:30:46

标签: mysql database database-design

为了加快阅读过程,我想把blob从一个表转移到另一个表。但后来我看到堆栈溢出的其他人建议使用 MySQL barracuda ,因为这种方法消除了传输blob的需要。

我的数据库(由旧程序员设计)

Visitor_visit(表名) - >包含5个blob列。想把blob移到另一张桌子上。

那我应该使用哪种方法?我应该如何分开桌子?我是否需要为每个blob创建5个表以获得更好的性能?我不是MYSQL的期望。

我现在不想将图像存储在磁盘中。 (目前的情况不允许我这样做)

2 个答案:

答案 0 :(得分:1)

Barracuda并没有像您想象的那样改变blob的储存方式。如果blob适合包含其他列行的数据页,则它将与这些列保持在一起。只有当斑点大于页面上的斑点时,它才会存储在页面外。

与Antelope比较,其中一个大blob也将主要存储在页外,但blob的前768个字节将与其他列一起存储在主页面上。所以我们只是在谈论blob的第一个3/4千字节存储方式的差异。

在这两种情况下,如果您只是不在查询中引用blob列(并且由于这个原因您不应该使用//declare the array of size 3 ClassOfStaticMethods[] SyskPin = new ClassOfStaticMethods[3]; //loop through the array for (int i = 0; i < 3; i++) { int kati = 5; //create a new instance ClassOfStaticMethods clas = new ClassOfStaticMethods(2, 2.1, "something", 90, 100, kati); //assign the new instance //to the place holder in the array based on the index SyskPin[i] = clas; } ),InnoDB足够聪明以避免获取额外的blob它不需要的页面。你不必另外制作一个存储blob的表。

答案 1 :(得分:0)

让我们看一下表格架构(<script> window.moveTo(0, 0); window.resizeTo(screen.width, screen.height); </script> ),一些blob大小的线索等等。

通常情况下,你不应该为5个blob做任何事情。一切都应该是自动的。

但是,存在一些聚合大小限制。同样,请提供更多细节如果您遇到了一些错误消息。

与此同时,我认为没有内在理由进行“垂直分区”。