为什么我的mysql没有';不使用索引?

为什么我的mysql没有';不使用索引?,sql,mysql,indexing,Sql,Mysql,Indexing,我正在调整mysql的查询。 架构具有用户id的索引(以下..) 但是没有使用索引。为什么? 环境: MySQL4.0.27,MyISAM SQL如下所示: SELECT type,SUM(value_a) A, SUM(value_b) B, SUM(value_c) C FROM big_record_table WHERE user_id='<user_id>' GROUP BY type 你能描述一下细节吗 计划如下: CREATE TABLE `big_record_

我正在调整mysql的查询。 架构具有用户id的索引(以下..) 但是没有使用索引。为什么?

环境: MySQL4.0.27,MyISAM

SQL如下所示:

SELECT type,SUM(value_a) A, SUM(value_b) B, SUM(value_c) C
FROM  big_record_table
WHERE  user_id='<user_id>'
GROUP BY type
你能描述一下细节吗

计划如下:

CREATE TABLE `big_record_table` (
 `user_id` int(11) NOT NULL default '0',
 `type` enum('type_a','type_b','type_c') NOT NULL default 'type_a',
 `value_a` bigint(20) NOT NULL default '0',
 `value_b` bigint(20) default NULL,
 `value_c` bigint(20) NOT NULL default '0',
 KEY `user_id_key` (`user_id`)
) TYPE=MyISAM

首先,我们看不到索引是如何声明的。你能把桌子弄一堆吗?在PostgreSQL中,您会使用
pg_dump
,但我不知道在MySQL中如何使用。你对表格做了分析吗?

我猜
类型
用户id
没有
索引


只要一个字母就行了。您没有太多可玩的东西。

可能是隐式类型转换阻止了索引的使用。您已将user_id定义为int,但在查询中指定了字符串。这使MySQL可以选择将查询中的字符串转换为int(可能不准确),或者将数据库中的每个用户id转换为字符串,以便与查询中的字符串进行比较

简短回答:尝试删除查询中的引号

SELECT type,SUM(value_a) A, SUM(value_b) B, SUM(value_c) C
FROM  big_record_table
WHERE  user_id=123
GROUP BY type

(其中123替换为正确的用户id)。

谢谢。是的,我已经分析过了,但是桌子的布局呢。我不知道你的索引是如何定义的。您是否在大记录表上创建了索引?这个索引是如何创建的?我已经写了这个方案。你能告诉我为什么吗?我应该阅读mysql优化器的源代码吗?谢谢你的回复。但我想知道为什么只有用户id不正确?@ffffff您正在按
类型进行分组。如果您使用
用户id
获得大量结果,则必须阅读这些结果才能了解不同的类型。非常感谢!如果您知道中列出的文档。我很高兴你能发布
SHOW CREATE TABLE big\u record\u TABLE
的输出吗?谢谢你的回复。我已经写了SHOW CREATE TABLE big\u record\u TABLE这个查询读取了多少条记录?
SELECT type,SUM(value_a) A, SUM(value_b) B, SUM(value_c) C
FROM  big_record_table
WHERE  user_id=123
GROUP BY type