对于Postgres,我在Partitioning table based on first letter of a varchar field中有一个非常类似的问题,但是,我想在MySQL5.7中这样做。
是否可以根据varchar字段的第一个字符在MySQL中对表进行分区?
我有一张垂直的桌子,其格式如下:
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`field_name` varchar(255) NOT NULL,
`field_value` text NOT NULL,
PRIMARY KEY (`id`)
)这张表的大小是100多万条记录。
我们使用的大多数select查询都指定要搜索的field_name。我想要做的是根据field_name来划分表。
因此,当我们有像field_name='email'和field_value='xyz@mail.com'这样的查询时,查询只需在包含所有电子邮件的分区中搜索,并跳过其余的分区。
field_name不是一个全面的列表,因此,我将无法使用列表分区。键分区也可能很难使用,因为我不想在分区中包括id,而键分区需要包含主键。
例如:
关于下列3项记录:
a-blah
a-blah2
b-blaha-blah和a-blah2将进入A分区,b-blah将进入B分区。
(2)如果MySQL无法实现上述情况,那么如何才能平均划分一个增长较大的垂直表?
发布于 2019-11-26 03:03:52
field_name='email‘和field_value='xyz@mail.com’
所以,真正的问题是EAV模式设计。它有很多的低效率,分区,特别是您建议的方式将无助于性能。
WordPress是EAV的一个常见示例,但是它可以通过改进索引:postmeta得到一些帮助。
更笼统地说:table
帮助EAV:http://mysql.rjweb.org/doc.php/eav的技术
只有4种情况下分区有助于性能;听起来不适合您的情况:http://mysql.rjweb.org/doc.php/partitionmaint
https://stackoverflow.com/questions/57620143
复制相似问题