1

我的数据库中有一个表:

在此处输入图像描述

我正在使用 MySQL 插入/更新/创建信息,但是执行查询所需的时间很慢,例如:

首先,当用户运行我的应用程序时,它会通过从数据库中检索所有 IP 来验证他们是否可以使用它

SELECT IP FROM user_info

如果 IP 在数据库中,则使用 while 循环执行另一个查询:

"SELECT Valid FROM user_info WHERE IP='".$_SERVER['REMOTE_ADDR']."'""

如果 Valid 为 1,那么他们可以使用它,否则他们不能使用,但是如果在 db 中找不到他们的 IP,它会使用为他们创建一个新条目

"INSERT INTO user_info (IP,First) VALUES ('".$_SERVER['REMOTE_ADDR']."','".date("Y/m/d") ."')")"

现在这个第一个脚本已经完成它访问另一个 - 这个应该每分钟更新一次数据库但是我不认为我现在可以做到这一点;更新查询是这样的:

"UPDATE user_info SET Name='".$Name."', Status='".$Status."', Last='".$Last."', Address='".$Address."' WHERE IP='".$_SERVER['REMOTE_ADDR']."'")"

总之,平均需要2.2 秒,并且表 atm 中只有 1 行

我的问题是如何加快 mysql 查询?我已经阅读了索引以及它们如何帮助提高性能,但我不完全了解如何使用它们。关于这个话题的任何启示都会有所帮助。

小块蛋糕

4

3 回答 3

3

随着站点的增长,索引将变得非常重要,但是当您的表中只有一行时它们将无济于事,并且这不是您的查询需要这么长时间的原因。您的数据库似乎存在某种基本问题。也许这是一个延迟问题。

尝试从一些更简单的查询开始,SELECT * FROM users LIMIT 1甚至只是SELECT 1看看你是否仍然得到糟糕的性能。

于 2012-07-22T18:06:10.677 回答
1

查询次数越少,系统的延迟就越小。尝试合并对同一张表进行的查询。例如,您的第二个和第三个查询可以合并,您可以执行

INSERT INTO user_info ...... WHERE Valid=1 AND IP= ...

检查受影响的行数以了解是否添加了新行。

此外,不要在两者之间的任何时候打开/关闭您的 sql 连接。建立新连接的开销可能很高。

于 2012-07-22T18:13:37.630 回答
-1

你可以制作IP主键和索引

于 2012-07-22T18:07:40.193 回答