有个数据库中的一个表 数据量达到千万级别 需要模糊查询 但是查询很慢 表结构如下CREATE TABLE `database` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(255) DEFAULT NULL,
  `pass` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=MyISAM AUTO_INCREMENT=7104815 DEFAULT CHARSET=utf8
查询语句如下:SELECT * FROM database WHERE user LIKE "%abc%" or email like "%abc%";
结果要30多秒才能查出 在网上查的建索引可以优化查询速度 于是用Navicat建索引 出现以下错误 求解决办法

解决方案 »

  1.   

    我不会语句呀 直接用的 Navicat 里面的图示化建的 下面那个错误截图 栏位就是列 因为是模糊查询 我就选上了要查询的多个列点保存 就提示这个错误了
      

  2.   

    like慢很正常
    你把引擎换成innodb的 alter  table xxxx engine=innodb;
      

  3.   

    `user` varchar(255) DEFAULT NULL,
      `pass` varchar(255) DEFAULT NULL,
      `email` varchar(255) DEFAULT NULL,这三个加起来已经太长了。 255*3 再使用UTF8,肯定超过 1000 字节了。
    MYSQL中索引有1000字节的限制。
      

  4.   

    WHERE user LIKE "%abc%" or email like "%abc%";
    这种语句有没有索引都一样,无法利用索引。 这类LIKE %X%无法优化。 可以考虑全文索引。
      

  5.   


    是这么做的 我是边学边搞的 但还有一些问题 下面又开了一贴 麻烦解答下http://bbs.csdn.net/topics/390301883
      

  6.   

    考虑存储引擎innodb,like的效率不会太高的。索引没有利用上。
      

  7.   

    SELECT * FROM database WHERE user LIKE "%abc%" or email like "%abc%";
    这种的查询不用索引的。肯定慢,优化下SQL语句吧。 like "abc%"尽量这样。
      

  8.   

    MySQL对全模糊没有办法使用索引的。
    这种类型的查询建议丢到专门的搜索引擎中去做吧,数据库做这种搜索的资源耗费和能力都不好。