有个数据库中的一个表 数据量达到千万级别 需要模糊查询 但是查询很慢 表结构如下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建索引 出现以下错误 求解决办法
`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建索引 出现以下错误 求解决办法
你把引擎换成innodb的 alter table xxxx engine=innodb;
`pass` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,这三个加起来已经太长了。 255*3 再使用UTF8,肯定超过 1000 字节了。
MYSQL中索引有1000字节的限制。
这种语句有没有索引都一样,无法利用索引。 这类LIKE %X%无法优化。 可以考虑全文索引。
是这么做的 我是边学边搞的 但还有一些问题 下面又开了一贴 麻烦解答下http://bbs.csdn.net/topics/390301883
这种的查询不用索引的。肯定慢,优化下SQL语句吧。 like "abc%"尽量这样。
这种类型的查询建议丢到专门的搜索引擎中去做吧,数据库做这种搜索的资源耗费和能力都不好。