有一个表Mysql InnoDB:
phone
必需,并且始终包含10位数字(任意)的电话号码。phone
不唯信,可以是多个包含同一部手机的不同字符串如何通过桌面上的phone
优化SELECT?分区会有帮助吗?
答案 0 :(得分:1)
如果您的数据(电话号码)分布均匀,则分区将非常有用。在第一个分区中有10个分区和90%的数据是没用的......
首先,如果你应该使用分区,理想的是RANGE
可以避免HASH
的开销,但它有缺点:
电话号码通常包含一些结构(国家代码,区号,......),这使得RANGE的分区成为偏差估计。
如果您有可能,我会建议:(1)以反向顺序(从右到左)存储和索引电话号码,因此最后的数字将首先出现更有可能统一分配。
然后,(2)如果可以的话,我会根据需要分割尽可能多的表(开始时为10),数字以X开头的数字开头。因此,这会将每个表中的行数限制为数据的子集。
在服务器配置中,存储每个表的innodb数据,这有助于使用并发进行索引。
当然,只有在架构中具有一定的灵活性且不需要针对整个数据集运行整合查询时,上述内容才适用。
答案 1 :(得分:1)
PARTITIONing
不帮助;它可能会减慢访问速度。相反,INDEX
上有一个非唯一的phone
。
更好的是,如果有PRIMARY
密钥或其他UNIQUE
密钥,请将PRIMARY KEY
更改为 start phone
。
如果当前PK为AUTO_INCREMENT
id
,请将其降级为INDEX(id)
。
有许多警告和变化。要进一步讨论,请提供SHOW CREATE TABLE
和常用的SELECT(s)
。