Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 关于性能的超大表基信息索引_Php_Mysql_Sql_Performance - Fatal编程技术网

Php 关于性能的超大表基信息索引

Php 关于性能的超大表基信息索引,php,mysql,sql,performance,Php,Mysql,Sql,Performance,我的表有30.000.000行,并且存在严重的性能问题。一开始,我不知道会有多少行,我只在至少23行的两个字段上创建了一个索引。这两个字段是varchar类型。其中20个字段是varchar和text类型,其中3个是int类型 我的第一个问题: 如何真正提高数据库的整体性能?找到了这么多提示,但没有一个真正有效。性能不佳会导致以下问题: 1) 我是否可以创建更多的索引?我是否可以将30.000.000行复制到一个空表中,其中包含为所有字段创建的索引(如果我尝试每个字段中的一个,则需要很多小时才能

我的表有30.000.000行,并且存在严重的性能问题。一开始,我不知道会有多少行,我只在至少23行的两个字段上创建了一个索引。这两个字段是varchar类型。其中20个字段是varchar和text类型,其中3个是int类型

我的第一个问题

如何真正提高数据库的整体性能?找到了这么多提示,但没有一个真正有效。性能不佳会导致以下问题:

1) 我是否可以创建更多的索引?我是否可以将30.000.000行复制到一个空表中,其中包含为所有字段创建的索引(如果我尝试每个字段中的一个,则需要很多小时才能中断查询,并且什么也没有发生)

2) 前端单个搜索的性能非常慢。如果同时连接了更多的客户端,它们会等待很长时间,只是为了在最后得到一个超时

一些代码:

"SELECT *, MATCH(item_query) AGAINST ('\"".$query."\"' IN BOOLEAN MODE) AS score 
 FROM items 
 WHERE MATCH(item_query) AGAINST ('\"".$query."\"' IN BOOLEAN MODE) AND item_address LIKE '%".$where."%' AND item_type = '".$what."' AND item_language = '".$_SESSION['language']."' AND item_country = '".$_SESSION['country']."' ORDER BY score DESC"
当用户在前端键入搜索查询时,使用此语句。item_查询id已编入索引,其他字段尚未编入索引

我甚至创建了一个脚本,可以读取1000个数据集,将其写入新的完整索引表,并不断地执行此操作,直到不再有数据出现。但是没有成功。。。脚本挂起10分钟后,我出现500服务器错误

当我使用GUI(SqlYog)查看数据并将结果限制在1000行甚至5000行时,它工作得非常完美——需要一点时间,但效果很好。所以这张桌子看起来还可以

我的第二个问题

一旦我找到了索引问题的任何解决方案,我如何改进上面看到的sql语句

提前感谢您的任何想法

向你问好,英格玛

当我使用GUI(SqlYog)查看数据时,我将结果限制为 1000行,甚至5000行,它工作得很完美-需要一点时间,但工作得很好 好。所以这张桌子看起来还可以

使用
检查表格名称
检查表格是否存在问题。先读

性能的一个经验法则是索引WHERE子句中使用的每一列。所以你至少要索引“项目类型”、“项目语言”和“项目国家”。我假设全文列“item_query”已经有了全文索引;“项目地址”的通配符条件不能使用索引。复合索引可能很有用

要隔离问题,请尝试删除“项目地址”的条件。还要学会使用和解释

我有一张3000万行的桌子。在varchar(35)列上创建索引大约需要10分钟。我的电脑没什么特别的

如果要将数据加载到新表中,最好创建一个没有索引、没有主键和外键的表;然后加载数据;最后创建索引、主键和外键


您也可以尝试在另一台计算机上重新加载它。(如果需要,也可以在同一台计算机上。)

您已将此问题标记为“MySQL”和“SQL Server”。是哪一个?什么版本?对不起,据我所知,MySql 5.x(我想是5.5或5.6)是一年前用apt get on debian安装的,这就是为什么我现在不知道确切的原因。如果你想确切地知道,我必须连接到服务器。表是MyISAM…在您的本地计算机上运行,而不是在远程计算机上运行?不相关,但使用或准备好的语句而不是串接字符串。嗨,迈克,您认为在其他字段上使用MATCH-on是否有意义?如果您知道要搜索的值,则不需要。