0

我有一个这样的数据库

在此处输入图像描述

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

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

服务器负载为: 在此处输入图像描述

现在我不能运行这样的小查询

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

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

更新 1:我的内容表是这样的 在此处输入图像描述

我有一个索引和它的 id 但是这样的查询也需要很多时间来运行

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

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

4

2 回答 2

4

在两边使用LIKE通配符不允许 MySQL 使用索引(如果该字段被索引),因此 3GB 的数据库实际上需要相当长的时间。我建议删除左侧通配符并(可能)查看MATCH AGAINST使用FULLTEXT索引。

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

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

于 2013-11-04T21:27:22.730 回答
1

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

您需要使用索引

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

于 2013-11-04T21:31:58.297 回答