数据库结构CREATE TABLE `aijiejiudia` (
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(15) NOT NULL DEFAULT '',
  `nickname` varchar(40) NOT NULL,
  `qq` varchar(11) NOT NULL,
  `password` varchar(32) NOT NULL DEFAULT '',
  `salt` varchar(40) NOT NULL,
  `secques` varchar(40) NOT NULL DEFAULT '',
  `email` varchar(32) NOT NULL DEFAULT '',
  `mobile` varchar(40) NOT NULL,
  `lastip` char(15) NOT NULL DEFAULT '',
  `regdate` varchar(10) NOT NULL DEFAULT '0',
  `lastlogintime` varchar(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`nickname`,`email`,`mobile`,`secques`,`lastlogintime`) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=19022923 DEFAULT CHARSET=utf8;我是用
Navicat for MySQL 导入的导入后的数据如下图我用的索引方式一直都是这个应该叫做联合唯一索引吧这次数据有1000万之多 发现有200W数据导入不进去 说是重复 可我随机看了几个 发现还是有的数据没有到进入那我的问题就是 
我想要的就是不重复数据 索引查询速度快 但要保证导入数据的完整性 也就是全部导进去 不重复 请问我这样的设计索引合理吗 如果不合理的话 请问如何改善  

解决方案 »

  1.   

    数据库表结构CREATE TABLE `aijiejiudia` (
      `id` int(8) unsigned NOT NULL AUTO_INCREMENT,
      `username` varchar(15) NOT NULL DEFAULT '',
      `nickname` varchar(40) NOT NULL,
      `qq` varchar(11) NOT NULL,
      `password` varchar(32) NOT NULL DEFAULT '',
      `salt` varchar(40) NOT NULL,
      `secques` varchar(40) NOT NULL DEFAULT '',
      `email` varchar(32) NOT NULL DEFAULT '',
      `mobile` varchar(40) NOT NULL,
      `lastip` char(15) NOT NULL DEFAULT '',
      `regdate` varchar(10) NOT NULL DEFAULT '0',
      `lastlogintime` varchar(10) NOT NULL DEFAULT '0',
      PRIMARY KEY (`id`),
      UNIQUE KEY `username` (`nickname`,`email`,`mobile`,`secques`,`lastlogintime`) USING BTREE
    ) ENGINE=MyISAM AUTO_INCREMENT=19022923 DEFAULT CHARSET=utf8;我是用
    Navicat for MySQL 导入的导入后的数据如下图我用的索引方式一直都是这个应该叫做联合唯一索引吧这次数据有1000万之多 发现有200W数据导入不进去 说是重复 可我随机看了几个 发现还是有的数据没有到进入那我的问题就是 
    我想要的就是不重复数据 索引查询速度快 但要保证导入数据的完整性 也就是全部导进去 不重复 请问我这样的设计索引合理吗 如果不合理的话 请问如何改善  
      

  2.   

    不重复的标准是什么?`nickname`,`email`,`mobile`,`secques`,`lastlogintime`
    这5个字段不重复?
    建议将文件先导入1个临时表中,处理完后,再导入工作表中
      

  3.   

    nickname`,`email`,`mobile`,`secques`,`lastlogintime 这5个字段不重复?
    对的为什么要先导入临时表呢 直接导入不好吗
      

  4.   

    在导入中无法处理重复的情况,导入后就可以检查原因 我是用
    Navicat for MySQL 导入的就是说重复 我查了有部分字段没导入 所以很奇怪 这个联合索引是不是有问题 
      

  5.   

    所以 我猜想是不是我的联合唯一索引有问题 不然不会发生这种情况的 按照从左的标准是不是有些字段有NULL  而没有参加索引?
      

  6.   

    貌似不对就算写入NULL 也不是为空字段 应该是一个字符吧
      

  7.   

    nickname建立索引就可以了  一般网站用户名昵称都是唯一的另外插入完成之后再建索引其实也快不了多少
      

  8.   

    nickname建立索引就可以了  一般网站用户名昵称都是唯一的另外插入完成之后再建索引其实也快不了多少 这个是不错的 不过我想查询 的话 根据条件就是索引的那么几个
      

  9.   

    你的要求是:有重复数据只保留其中的一个
    用LOAD DATA是无法实现的
      

  10.   

    是的啊 呵呵 所以我用的是Navicat for MySQL 
    没用LOAD DATA 
    关键是这个联合唯一索引这个问题 我用了联合唯一索引 不就可以保证我在导入的时候就可以不重复导入数据吗
      

  11.   

    Navicat for MySQL +联合唯一索引 导入慢了点 但是精准数据