2012-05-25 45 views
0

在我的项目中,我有一个大约20列的表格。我们已将列表'状态'分区。为了简单起见,假设状态“ERROR”和“SUCCESS”有两个可能的值。因此我们有两个分区,分别表示p1和p2。我们想要的是在每个分区上都有不同的索引。例如,分区p1需要在列1和列2上有索引,而分区p2需要在列4和列5上有索引。在MySql中索引表格分区

是否可以在MySql中的表的单个分区上应用索引,而不是在表中应用索引水平?我正在使用Mysql 5.5。我不想在表级应用索引的原因是它会使所有插入缓慢。在此表中插入将对用户的响应时间产生影响。然而更新通过工作发生,因此响应时间不是问题。

回答

0

在MySQL索引工作在表级别,而不是分区级别。

从你的问题好像你需要准备好做很多看起来像

SELECT something WHERE status='ERROR' and col1='val' and col2='val' 

SELECT something WHERE status='SUCCESS' and col4='val' and col5='val' 

非常快的查询。你会做改变的UPDATE status列的值?如果不是,您可以将您的SUCCESS和ERROR项目插入不同的表格,每个表格都适当地编制索引。如果你需要一起检索它们,你可以使用VIEW来做到这一点。

+0

是的,你已经正确理解了这个需求。但是状态会被更新。根据您的解决方案,我需要创建两个表并首先在一个表中插入数据。状态更新后,从第一个表中删除数据并插入到另一个表中。这似乎并不是最好的解决方案,但如果我们不能在分区级应用索引,那么可能我没有其他选择,只能使用您的解决方案。感谢您的回复 –

+0

在接收新记录和将它们插入此表(这些表格)之间是否允许延迟一分钟?如果是这样,你可以将它们插入一个小的保存表中,然后使用每分钟运行一次的“事件”来批量插入它们。这会使插入操作的时间超出您的交互时间预算。 –

+0

感谢您的回应。我想我将不得不使用您提出的这些自定义解决方案中的一些,因为MySql中没有内置机制来处理此问题。 –