【发布时间】:2020-06-23 20:39:52
【问题描述】:
我有这个非常简单的查询,但由于某些限制,我不想在这里使用索引。
所以我担心的是,如果我们在 where 子句中调用非索引项,如何避免服务器上的巨大负载。
我觉得解决方案是有限的。 我确信有 1000 行中的数据,所以如果我使用限制,我可以检查可用值。
SELECT *
from tableA
where status='1' and student='$student_no'
order by id desc
limit 1000
这里的学生列没有在 mysql 中建立索引,所以我担心它会在服务器中造成巨大的负载
我尝试了解释,它似乎没问题,但问题是表中的行数较少,而且你知道 mysql 会因为更多的数据(如数百万行)而发疯。
那么我有什么选择??
我应该为学生添加索引?? 如果我要添加索引,那么我不需要限制 1000 行。一行就足够了,正如我所说,表将有几百万行,所以它需要大量空间,所以我想避免索引学生列,其他查询是 1000 行,desc 行不应该导致服务器上的负载作为 id已编入索引。
任何帮助都会很棒
【问题讨论】:
-
您是否使用 LIMIT 只是为了让数据库在前 1000 行中“搜索”?换句话说,您是否只是为了性能而使用 LIMIT ?只是为了澄清
-
@EEAH 是的。如果我不使用限制,它将搜索数百万个数据
-
这段代码容易受到sql注入的影响,所以请使用带参数的预处理语句参见stackoverflow.com/questions/60174/…
-
@sujara 如果在前 1000 行中没有找到任何记录会怎样?
-
mysql 仍将搜索所有行,以找到匹配项,应保留 Status 和 student 的索引。所以试试吧
标签: mysql