Mysql group by在使用索引时返回错误的结果
我在一个mySql查询中遇到了一个问题。该问题在我们的任何本地机器上都不可复制。 我有一个简单的问题Mysql group by在使用索引时返回错误的结果,mysql,indexing,group-by,Mysql,Indexing,Group By,我在一个mySql查询中遇到了一个问题。该问题在我们的任何本地机器上都不可复制。 我有一个简单的问题 SELECT ID FROM TABLE_NAME WHERE ID IN (15920,15921) GROUP BY ID 返回结果- ID 15920 •使用having子句而不是where子句 SELECT ID FROM TABLE_NAME GROUP BY ID HAVING ID IN (15920,15921) •忽略本表中使用的索引- SELECT ID F
SELECT ID
FROM TABLE_NAME
WHERE ID IN (15920,15921)
GROUP BY ID
返回结果-
ID
15920
•使用having子句而不是where子句
SELECT ID
FROM TABLE_NAME
GROUP BY ID
HAVING ID IN (15920,15921)
•忽略本表中使用的索引-
SELECT ID
FROM (SELECT ID
FROM TABLE_NAME
WHERE ID IN (15920,15921)) CUST
GROUP BY ID
SELECT ID
FROM TABLE_NAME IGNORE INDEX (CUST_SID_SRUN_INDX)
WHERE ID IN (15920,15921)
GROUP BY ID
所有上述查询返回的预期结果如下:-
ID
15920
15921
身份证件
15920
15921
我试图分析使用索引时GROUPBY子句的意外行为。如果我能试试别的,请告诉我。
仅供参考…出现问题的UAT框是一台使用Mysql 5.1.30的linux机器。我们看到的区别是Mysql的版本。我们在机器上使用Mysql 5.1.52。
出现此问题的表使用MyISAM数据库引擎
如果需要任何其他输入,请告诉我 如果查询结果使用索引时出错,则可能是由于某种原因导致表损坏。尝试:
REPAIR TABLE table_name;
或者尝试备份数据,销毁并重新创建表,然后从备份中将数据重新填充到表中(这也将重新创建索引)
访问谢谢大家的帮助 MySql 5.1.30中有一个MyISAM分区的问题,在我绞尽脑汁数天后,我通过将MySql升级到5.1.52版本或重新组织分区解决了这个问题 请参阅MySQL论坛上报告的以下错误以供参考:
您的
ID
列的数据类型是什么?如果是字符串类型,则4字节的键长度表示MySQL只索引了(最多)列值的前四个字符,因此无法区分15920
和15921
。否则,我建议尝试将index.ID设置为int类型,且值不为null。我尝试转储并还原到新数据库。当在同一台机器上还原时,问题仍然存在。但当我在另一台机器上修复它时,它工作得很好。表的索引定义如下:表非唯一键名称顺序索引列名称排序基数子部分压缩空索引类型注释表名称1 CUST\u SID\u SRUN\u INDX 1 ID 68 BTREE表名称1 CUST\u SID\u SRUN\u INDX 2运行428 BTREE您是在存储过程中偶然执行此操作还是只是在真空中运行查询?否我们没有使用任何存储过程。我们只是在mysql控制台上执行此查询。@Eggyal还有一件事要提,我们也尝试过重建索引。问题仍然存在。这个问题只出现在一台服务器上,我预计可能会出现一些mySql配置问题。
REPAIR TABLE table_name;