我现在一个大概有10万条的单表中执行下面的查询语句,时间大概要17秒.SELECT COUNT( id) FROM cass WHERE almc LIKE '%合同%';id 是主键,自增长的. 我想请问大家这是什么原因.我用的mysql版本是5.0.27 我在SQL Server中执行同样的语句不到一秒.
谢谢.
-----------------------------------------------------------
cass表的结构是:
CREATE TABLE `cass` (
`id` int(11) NOT NULL auto_increment,
`almc` varchar(255) character set latin1 collate latin1_bin default NULL,
`wslb` varchar(64) character set latin1 collate latin1_bin default NULL,
`spcx` varchar(10) character set latin1 collate latin1_bin default NULL,
`cpwh` varchar(34) character set latin1 collate latin1_bin default NULL,
`cpsj` varchar(10) character set latin1 collate latin1_bin default NULL,
`slfy` varchar(64) character set latin1 collate latin1_bin default NULL,
`ajlb` varchar(64) character set latin1 collate latin1_bin default NULL,
`gjz` varchar(200) character set latin1 collate latin1_bin default NULL,
`TP_ID` int(11) default NULL,
`alnr` longtext,
`tp_lbmc` char(1) character set latin1 collate latin1_bin default NULL,
`oldlevel1` varchar(20) default NULL,
`oldlevel2` varchar(20) default NULL,
`oldlevel3` varchar(20) default NULL,
`bl1` int(11) default NULL,
`bl2` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `indx_spcx` (`spcx`),
KEY `indx_mc` (`almc`),
KEY `indx_cpwh` (`cpwh`),
KEY `indx_wslb` (`wslb`),
KEY `indx_oldlevel1` (`oldlevel1`),
KEY `indx_oldlevel2` (`oldlevel2`),
KEY `indx_oldlevel3` (`oldlevel3`)
) ENGINE=MyISAM AUTO_INCREMENT=106699;
谢谢.
-----------------------------------------------------------
cass表的结构是:
CREATE TABLE `cass` (
`id` int(11) NOT NULL auto_increment,
`almc` varchar(255) character set latin1 collate latin1_bin default NULL,
`wslb` varchar(64) character set latin1 collate latin1_bin default NULL,
`spcx` varchar(10) character set latin1 collate latin1_bin default NULL,
`cpwh` varchar(34) character set latin1 collate latin1_bin default NULL,
`cpsj` varchar(10) character set latin1 collate latin1_bin default NULL,
`slfy` varchar(64) character set latin1 collate latin1_bin default NULL,
`ajlb` varchar(64) character set latin1 collate latin1_bin default NULL,
`gjz` varchar(200) character set latin1 collate latin1_bin default NULL,
`TP_ID` int(11) default NULL,
`alnr` longtext,
`tp_lbmc` char(1) character set latin1 collate latin1_bin default NULL,
`oldlevel1` varchar(20) default NULL,
`oldlevel2` varchar(20) default NULL,
`oldlevel3` varchar(20) default NULL,
`bl1` int(11) default NULL,
`bl2` int(11) default NULL,
PRIMARY KEY (`id`),
KEY `indx_spcx` (`spcx`),
KEY `indx_mc` (`almc`),
KEY `indx_cpwh` (`cpwh`),
KEY `indx_wslb` (`wslb`),
KEY `indx_oldlevel1` (`oldlevel1`),
KEY `indx_oldlevel2` (`oldlevel2`),
KEY `indx_oldlevel3` (`oldlevel3`)
) ENGINE=MyISAM AUTO_INCREMENT=106699;
你的是windows版本?
不能使用索引,自然会慢。
http://bbs.bjp.org.cn/html/modules/newbb/viewtopic.php?post_id=52162
Mysql有没有可以优化的地方.
谢谢
你现在要改变的是表结构,一个好的表结构可以避免这种查询。
当然你也可以使用sqlserver.不过我认为你在那个数据库上的快速是因为第一次查询后,第二次查询使用了缓存的结果。你可以再试几次。
我想MSSQL若会快,肯定用到FULLTEXT的技术