大的mysql数据库慢动作

时间:2013-11-04 21:23:28

标签: php mysql

我有一个这样的数据库

enter image description here

它有我用php脚本和linux cron作业抓取的网站的内容

在我获得网站的所有页面后,它会慢慢开始工作

和服务器负载是: enter image description here

现在我无法运行像这样的小查询

SELECT * FROM `content` WHERE `html` LIKE '%%simple%%'

我认为3gb对于mysql来说并不多! 服务器有双5620 CPU和32克内存 有了这个硬件,我认为它可以处理高达2tb的数据库!!

更新1: 我的内容表是这样的 enter image description here

我有一个索引及其id,但像这样的查询需要大量时间来运行

 <?php echo mysql_num_rows(mysql_query("SELECT * FROM pages where `update_date`!='0000-00-00 00:00:00' and `type`='page';")); ?>

你的意思是我只是将html字段更改为全文!?

2 个答案:

答案 0 :(得分:4)

使用LIKE和双方的通配符一样,不允许MySQL使用索引(如果字段已编入索引),因此3GB的数据库实际上需要花费很长时间。我建议删除左侧通配符,并(可能)使用MATCH AGAINST索引查看FULLTEXT

更多信息:http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

值得注意的是,在MySQL PRIOR 到版本5.6中,您需要将表格转换为MyISAM以使用FULLTEXT引擎。在5.6及更高版本中,您可以在InnoDB和MyISAM中使用它们。如果由于某种原因您无法升级或使用5.6+,那么您始终可以设置MyISAM表,其中仅包含您为FULLTEXT目的而存储的信息。然后,设置触发器在从InnoDB中删除时从MyISAM表中复制/删除信息。这可能不适用于您的项目目标,但它是一种解决方案。

答案 1 :(得分:1)

每次查询运行时,您都会搜索 30亿个字符进行字符串匹配。

You need to use an index

我还认为你使用了错误的查询谓词,并且应该使用专为此类事情设计的full-text-search。您还想索引全文搜索。