【发布时间】:2014-05-13 20:01:05
【问题描述】:
我有一个搜索设置,我正在尝试优化查询以使用 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 )) {
这是一个数据库示例和其中的一些表
数据库:人
表:大会
|身份证 |名字 |姓氏 |
| 111111111 |乔 | SkypeMan |
| 111111112 |苏珊 |雅虎 |
| 111111113 |比尔 |谷歌海姆 |
| 111111114 |玛格丽特 |宾格多夫 |
| 111111115 |马克 |奥尔德尔森 |
表:参议院
|身份证 |名字 |姓氏 |
| 111111111 |托德 |样品人 |
| 111111112 |杰森 |数据填充 |
| 111111113 |内夫 | LoremIpsum |
| 111111114 |威廉|点点 |
| 111111115 |丽莎 |逗号 |
任何关于优化的帮助将不胜感激!
【问题讨论】:
-
请注意,mysql 扩展已被弃用,多年来一直不鼓励使用。您可能想要迁移到 mysqli 或 PDO,另请参阅 stackoverflow.com/questions/12859942/…
-
将所有不同的表合并为一个,为“senate”、“congress”等添加一个标识符。然后你只需要一个查询而不是几个。
-
不要使用“SELECT *”。您应该只检索您实际要使用的字段。例如:“选择 ID、名字、姓氏……”
-
谢谢,我知道它已经贬值了。将所有内容合二为一是不可能的。我正在重写选择语句。谢谢大家的意见!
标签: php mysql database query-optimization