当前位置: 首页 > 知识库问答 >
问题:

MySQL查询40,000行V/s一次加载和for循环

东方俊杰
2023-03-14

我有一个有四万行的表。从代码端大约在同一秒左右,大约20,000个用户将需要运行一个查询来找到他们的相关行。在这里什么是更好的方法?

加载缓存中的所有40,000行并对它们运行for循环以查找记录?简单查询数据库。

下面是查询的外观。其中参数将是用户的IP。

SELECT * FROM iplist where ipfrom <= INET_ATON('xxx.xxx.xx.xx') limit 1;

共有1个答案

陆洛城
2023-03-14

MySQL已经以InnoDB缓冲池的形式缓存了数据。当数据页和索引被请求时,它们被复制到RAM,并用于任何后续查询。

如果尚未为所搜索的列定义索引或主键,则应为该列定义索引:

ALTER TABLE iplist ADD INDEX (ipfrom);

那么在该列中搜索特定值将不需要进行表扫描,它将有效地缩小搜索范围。

注当您使用LIMIT时,还应该使用ORDER BY,否则您获得的行将是按索引顺序读取的第一行,这可能并不总是您想要的。如果您冗余地使用ORDER BY(即它读取索引的顺序相同),那么它将被优化掉。

SELECT * FROM iplist where ipfrom <= INET_ATON(?) ORDER BY ipfrom LIMIT 1;
 类似资料:
  • 问题内容: 在我的node.js Express应用程序中,我正在使用superagent中间件进行ajax调用。该调用使用Node- mysql 中间件通过许多数据库查询来获取复杂数组中的数据库数据。 在粘贴代码之前,我试图用语言解释我要做什么,尽管代码足以说明它想要做什么,另外, 第一个回调 中的 所有异步操作都应该以同步方式完成。 说明: 在第一个查询的回调中,将执行一次for循环以多次运行

  • 我的问题是,我试图在一个数组上迭代多次,但是,我的for循环只会在该数组上迭代一次(或者在我看来是这样),这会导致结果错误。 我试图在这个数组上循环:

  • 我重新定义了这个问题,因为我认为这个问题应该与这个in-mongoDB-know-index-of-array-element-matched-with-in-operator分开。 另外,我提取了30,000个样本集合,并尝试使用$match和find查询运行聚合,我发现聚合比find查询快一点,因为聚合需要180ms才能执行,而find需要220 ms才能执行。 请帮帮我,伙计们,这对我真的很

  • 问题内容: 尝试在运行时向我的Web应用程序中的所有MySQL Select查询添加注释。 例如,代码中的原始查询如下所示: 所有这些都需要 在运行时 修改为: 该应用程序在Hibernate 4.2.1上运行。我能想到的唯一解决方案是扩展并在中添加。 对于为实现此目的而修改的方法有些困惑。希望任何朝着正确方向的指针。 可以重写in方法来做到这一点吗? 编辑1:自定义MySQL方言中的transf

  • 问题内容: 在执行INSERT查询时,MySQL / PHP返回了什么吗?这是我在CLASS中具有的功能。 这就是我所谓的函​​数 但是执行查询不会返回任何内容。我的功能是否需要帮助,或者这是默认行为吗?任何提示也将有所帮助。 问题答案: INSERT只返回true或false。要真正返回有用的东西,您将需要SELECT或类似的查询。没有要使用INSERT提取的结果。

  • 问题内容: 我不清楚和之间的区别。如果我使用而不是会发生什么。 方法到底能做什么? 问题答案: 调用窗口将根据其包含的组件的preferredSize对其大小进行调整。它应尽可能小,但要考虑其组件的preferredSize和布局。如果您只是随机使用,则添加到内容窗格中的组件将进行扩展/收缩以适应可用空间,这意味着可能会覆盖每个组件的首选大小。 设置组件的大小并设置首选的大小。Layoutmana