我有一个带主键的Mysql表:
CREATE TABLE `members` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`type` char(1) ,
`status` char(1) ,
`enable` char(1),
`club` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3714 DEFAULT CHARSET=utf8 ;
如果我执行以下查询
SELECT * FROM members WHERE club='adfsd';
我在查询/准备好的陈述中使用了“没有索引”#39;来自Mysqli的警告。这是公平的 - 我真的应该有一个索引。然后我在俱乐部上添加一个索引
KEY `club` (`club`)
索引是 - 我可以通过DESCRIBE看到它,但是当我执行SELECT查询时,我得到相同的'没有使用索引...'警告。
所以我将indexname更改为与列名
不同的名称KEY `clubind` (`club`)
并且查询无效警告。
如果我在其他列之一上建立索引,请说“状态”#39;并使用' status'作为索引名称,并使用查询中的列,一切都按预期工作。
我能看到的唯一不同的是,有问题的列是整数,其他是字符。
答案 0 :(得分:0)
您已将club
声明为整数。
您的查询是:
SELECT * FROM members WHERE club = 'adfsd';
混合数据类型通常会阻止使用索引。
此外,查询中是否使用索引取决于表的大小。即使对于适当的查询,索引的存在并不总是意味着它将被使用。