索引mysql已损坏?

时间:2012-08-29 12:40:54

标签: mysql indexing corrupt

有一个mysql表,我认为唯一索引已损坏。 当我执行以下sql:

SELECT field_b FROM table LIMIT 0,10 

响应为NULL(10行,带NULL)。

但是如果我执行

SELECT field_b FROM table WHERE field_a = 1

我收到(非空)数据。发生了什么?

以下是表格属性

field_a and field_b = INT(11)
field_a = PRIMARY
field_b = UNIQUE INDEX
Table type = INNODB

此表格中有200k +行。

2 个答案:

答案 0 :(得分:0)

尝试使用filed_b代替field_b

SELECT filed_b From table limit 0,10 //spelling mistake

答案 1 :(得分:0)

您可以在具有唯一索引的列中包含重复的NULL值。唯一索引仅保证非空值是唯一的。

正如documentation所述,BDB存储引擎存在异常。

  

UNIQUE索引创建一个约束,以便索引中的所有值   必须是截然不同的如果您尝试使用a添加新行,则会发生错误   与现有行匹配的键值。此约束不适用   除了BDB存储引擎之外的NULL值。

至少有十行,其中field_b为NULL,并且在您发出查询时它们会显示。

要查看field_b为NULL的所有行,请尝试:

SELECT * FROM table WHERE field_b IS NULL