想给test_user
表中的的uid
,cardid
,carid
建立普通索引,用navicat for mysql
建索引,生成的SQL语句,有下面两种写法,请问有什么区别吗?
CREATE TABLE `test_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增唯一主键ID',
`uid` smallint(11) DEFAULT NULL COMMENT '用户ID',
`cardid` smallint(5) DEFAULT NULL COMMENT '卡号',
`carid` varchar(20) DEFAULT NULL COMMENT '车辆ID',
`intime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '数据写入时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `base` (`uid`,`cardid`,`carid`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='车辆信息表(测试用)';
-----------------------------------------------------------------------------
CREATE TABLE `test_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增唯一主键ID',
`uid` smallint(11) DEFAULT NULL COMMENT '用户ID',
`cardid` smallint(5) DEFAULT NULL COMMENT '卡号',
`carid` varchar(20) DEFAULT NULL COMMENT '车辆ID',
`intime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '数据写入时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `uid` (`uid`) USING BTREE,
KEY `cardid` (`cardid`) USING BTREE,
KEY `carid` (`carid`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='车辆信息表(测试用)';
一般情况下建议使用第一种多列索引,但多列索引使用遵循最左前缀原则,列的排序特别重要,经验法则是选择性多的列在前;如果表字段如上比较少的话覆盖索引查询应该比较多。
单列索引的话也可以通过索引合并使用到多个索引,但整体不如第一种好。
建议改为innoDB引擎
建议参考高性能mysql第五章。