【发布时间】:2012-08-29 12:40:53
【问题描述】:
有一个 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+ 行。
【问题讨论】:
-
“响应为 NULL”是什么意思?您的结果集中是否有零行,或者这就是某些 SQL 包装方法返回的内容?
-
返回 10 行且全部为 NULL 的平均值
-
但这不能仅仅意味着表的前 10 行将
field_b设置为NULL(即使在 InnoDB 中使用 UNIQUE 约束也是可能的)?试试这个查询:SELECT COUNT(*) FROM table WHERE field_b IS NULL来检查这个。 -
"first 10" -- 表示它选择获取的前 10 个;可能来自
INDEX(field_b);这就是任何 NULL 值的位置。