我有一个搜索设置,我正在尝试优化查询以使用MySQL ver14.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 | FirstName |姓氏|
| 111111111 |乔| SkypeMan |
| 111111112 |苏珊| Yahooser |
| 111111113 |比尔| Googleheim |
| 111111114 |玛格丽特| Bingledorf |
| 111111115 |马克| Aoldelson |
表:参议院
| ID | FirstName |姓氏|
| 111111111 |托德| Sampleguy |
| 111111112 |杰森|数据填写|
| 111111113 |内夫| LoremIpsum |
| 111111114 |威廉| Dotdotdot |
| 111111115 |丽莎| Commaquote |
任何有关优化此功能的帮助都将不胜感激!
答案 0 :(得分:1)
在LIKE
子句中尽可能摆脱=
并使用WHERE
。这可能会解决您的问题。它也有助于查看您的索引。我假设您已将FirstName和LastName编入索引。
答案 1 :(得分:0)
将LIKES转换为'='将真正有助于提高速度,但只要您将百分号仅保留在后面,就可以了。如果它确实运行缓慢,您应该确保在WHERE语句中使用的列上添加INDEX。添加索引非常简单:
CREATE INDEX index_name
ON table_name (column_name)