Php 大型mysql数据库访问速度慢

Php 大型mysql数据库访问速度慢,php,mysql,Php,Mysql,我有一个这样的数据库 SELECT * FROM `content` WHERE `html` LIKE '%%simple%%' 它包含我用php脚本和linux cron作业抓取的一个站点的内容 当我得到所有的网站页面后,它开始慢慢地工作 服务器负载为: 现在我无法运行这样的小查询 SELECT * FROM `content` WHERE `html` LIKE '%%simple%%' 我认为3gb对于mysql来说不算多! 服务器具有双5620 cpu和32 g ram 有了这

我有一个这样的数据库

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

它包含我用php脚本和linux cron作业抓取的一个站点的内容

当我得到所有的网站页面后,它开始慢慢地工作

服务器负载为:

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

SELECT * FROM `content` WHERE `html` LIKE '%%simple%%'
我认为3gb对于mysql来说不算多! 服务器具有双5620 cpu和32 g ram 有了这个硬件,我认为ed可以处理高达2tb的db

更新1: 我的内容表是这样的

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

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

像两边都使用通配符一样使用
不允许MySQL使用索引(如果字段被索引),因此3GB的数据库实际上需要花费相当长的时间。我建议删除左边的通配符,并(可能)使用
全文索引查看
的匹配

更多信息:


值得注意的是,在MySQL5.6版之前的版本中,您需要将表转换为MyISAM,以利用
全文
引擎。在5.6及以上版本中,您可以在InnoDB和MyISAM中使用它们。如果由于某种原因无法升级或使用5.6+,则始终可以设置MyISAM表,其中仅包含为
全文
目的而需要存储的信息。然后,当MyISAM表从InnoDB中删除时,安装程序会触发从MyISAM表中复制/删除信息。这可能不符合您的项目目标,但它是一种解决方案。

像使用通配符一样使用两边的通配符,不允许MySQL使用索引(如果字段已索引),因此3GB的数据库实际上需要花费相当长的时间。我建议删除左边的通配符,并(可能)使用
全文索引查看
的匹配

更多信息:


值得注意的是,在MySQL5.6版之前的版本中,您需要将表转换为MyISAM,以利用
全文
引擎。在5.6及以上版本中,您可以在InnoDB和MyISAM中使用它们。如果由于某种原因无法升级或使用5.6+,则始终可以设置MyISAM表,其中仅包含为
全文
目的而需要存储的信息。然后,当MyISAM表从InnoDB中删除时,安装程序会触发从MyISAM表中复制/删除信息。这可能不符合您的项目目标,但它是一种解决方案。

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


我还认为您使用了错误的查询谓词,应该使用专门为这类事情设计的。您还需要为全文搜索编制索引。

每次运行该查询时,您都要搜索30亿个字符以获得字符串匹配



我还认为您使用了错误的查询谓词,应该使用专门为这类事情设计的。您还需要为全文搜索编制索引。

您需要将全文索引添加到表中,并切换到MyISAM,然后使用MATCH。@ChristopherMorrissey单独使用索引可能无法解决此问题,因为在LIKE中使用前导通配符将不允许正确使用索引。OP需要研究的是全文搜索-他还需要将表转换为MyISAM,以便利用这种搜索,并在将要执行搜索的字段上提供全文索引。我很震惊,没有人让你运行
解释
。。根据你的更新,你会想向其中添加索引
update\u date
type
,@MikeB查看
EXPLAIN
是正确的。。。但我会首先阅读索引@ChristopherMorrissey
type
update\u date
用于不同的表,如果我添加全文,则
content
表不需要更多的插入时间!?您需要将全文索引添加到表中,并希望切换到MyISAM,然后使用MATCH。@ChristopherMorrissey单独使用索引可能无法解决问题,因为在LIKE中使用前导通配符将不允许正确使用索引。OP需要研究的是全文搜索-他还需要将表转换为MyISAM,以便利用这种搜索,并在将要执行搜索的字段上提供全文索引。我很震惊,没有人让你运行
解释
。。根据你的更新,你会想向其中添加索引
update\u date
type
,@MikeB查看
EXPLAIN
是正确的。。。但我会首先阅读索引@ChristopherMorrissey
type
update\u date
用于不同的表,如果我添加全文,则
content
表不需要更多的插入时间!?您可能会添加OP需要利用MyISAM表并提供搜索字段的全文索引question@MikeBrant根据手册,从MySQL 5.6开始,InnoDB也可以使用全文索引。尽管如此,这是一个很好的观点;我会把它添加到我的答案中。谢谢你们,但我需要你们的想法,如果我改变引擎,添加全文和其他索引,使用这些硬件,2*5620和32 gb ram,它能处理多少大小的db!?例如,在中可以做5tb@peimanF不了解您的整个系统、需要索引的数据的大小等。没有办法告诉您硬件可以处理什么。为了获得最佳性能,您需要将整个索引保存在内存中(因此需要知道索引大小)。因此,您可能需要自己做一些测试,以了解您的硬件需求。然而,我想说的是,如果您正在谈论需要索引5TB的数据用于搜索,那么MySQL可能不是您的最佳选择。你需要研究一下像S这样的技术