Php 只是一个简单的问题?

Php 只是一个简单的问题?,php,mysql,database,query-optimization,Php,Mysql,Database,Query Optimization,我有一个搜索设置,我正在尝试使用MySQL版本14.14 5.5.36 x64_64优化查询,php版本为5.2.17 数据库中的每个表中都有几十万个项目,当有50多个用户在线时,完成搜索的时间变得难以忍受 基本上,我使用以下方法循环数据库中的表: $result = mysql_query("show tables",$dbc1); while($table = mysql_fetch_array($result)) { $tablename = $table[0]; 然后我将在其中执行

我有一个搜索设置,我正在尝试使用MySQL版本14.14 5.5.36 x64_64优化查询,php版本为5.2.17

数据库中的每个表中都有几十万个项目,当有50多个用户在线时,完成搜索的时间变得难以忍受

基本上,我使用以下方法循环数据库中的表:

$result =  mysql_query("show tables",$dbc1); 
while($table = mysql_fetch_array($result)) {
$tablename = $table[0];
然后我将在其中执行此查询:

"SELECT * FROM $tablename WHERE FirstName like '$SanitizedFirstName%' and LastName like '$SanitizedLastName%' order by ID asc "
然后我循环并输出结果

while($row = mysql_fetch_array( $resultant2 )) {
下面是数据库的一个示例和其中的一些表

数据库:人

表:国会

|ID |名|姓|
|111111111 |乔|斯凯派曼|
|11111111 2|苏珊|亚胡瑟|
|11111111 3 |比尔|谷歌海姆|
|11111111 4 |玛格丽特|宾格勒多夫|
|11111111 5 |马克|奥尔德森|

表:参议院

|ID |名|姓|
|111111111 | Tod | Sampleguy |
|11111111 2 | Jason |数据填充|
|11111111 3 | Neff | LoremIpsum |
|11111111 4 | William | Dotdot |
|11111111 5 |丽莎|康马库特|


任何关于优化此的帮助都将不胜感激

WHERE
子句中尽可能去掉
类似的
,并使用
=
。这可能会解决你的问题。查看索引也会有所帮助。我想你的名字和姓氏都被编入了索引。

将喜欢的东西转换成“=”会有助于提高速度,但只要你把百分号放在后面,你就可以了。如果运行速度真的很慢,那么应该确保在WHERE语句中使用的列上添加索引。添加索引非常简单,如下所示:

CREATE INDEX index_name
ON table_name (column_name)

请注意,mysql扩展已被弃用,多年来一直不鼓励使用它。您可能希望迁移到mysqli或PDO,另请参见将所有不同的表合并到一个表中,为“senate”、“congress”等添加标识符。然后您只需要一个查询,而不需要几个查询。不要使用“SELECT*”。您应该只检索实际要使用的字段。例如:“选择ID、姓氏、姓氏…”谢谢,我知道它被贬值了。把所有的东西结合在一起是不可能的。我正在重写select语句。谢谢大家的意见!我将like改为=,这没有多大帮助,而且我正在设置FirstName和LastName索引。非常感谢。在
WHERE
子句的每个字段上都需要索引。在查询值的开头使用
%
(例如类似“%$SanitizedLastName%”的LastName)可防止对该条件使用索引。但是,如果不使用前导的
%
(如LastName,如“$SanitizedLastName%”),则可以像
一样使用它,并获得所需的性能。如果可以,最好使用
=
。让我知道进展如何。