我正在开发一个网站(MLM),其中“memberdata”表中有大约155000行,包含63列。 所有成员经常从该表中搜索不同的数据。 我的SQL查询就像:
$search=htmlentities($_POST['search_field']); /// The field which will be selected
$value=htmlentities($_POST['search_value']); /// The value which will be compared
SELECT * FROM memberdata WHERE $search='$value' AND (senior='".$_SESSION['id']."' OR id > '".$_SESSION['id']."')
但是除了“id”之外没有索引字段。 “id”是“主要的AUTO_INCREMENT”。
我的查询花费的时间太长,有时会显示“超出服务器执行时间超过30秒”等。 我该怎么办?如何在没有索引的情况下更快地进行查询?我在共享主机上的Apache服务器上。
答案 0 :(得分:8)
为什么你不想添加索引?你可以随时做一些技巧来加强,但它会从不和索引一样快。
至于回答您的实际答案,您可以尝试通过从SELECT
/ WHERE
子句中删除不必要的字段来尽可能缩小数据库中的搜索范围。或者尝试做很多小问题而不是大问题...我担心你必须尝试一些解决方案,然后对它们进行一些基准测试,为你的设置选择最好的一个。
但添加索引更简单,更快(但不会错误地修复错误的数据库设计/错误的应用程序)。
答案 1 :(得分:1)
为什么不选择您需要的字段而不是所有字段?你不需要自动增量的字段。您离开搜索的内容越多,搜索的速度就越快,因为它需要经过的数据要少得多。