当前位置: 首页 > 面试题库 >

为什么不使用mysql ORDER BY RAND()?

乌杰
2023-03-14
问题内容

我看到许多网站说不使用ORDER BY
RAND(),例如http://forge.mysql.com/wiki/Top10SQLPerformanceTips。所以我运行了一个测试,测试了20k条记录表的速度和性能,其中有10k条记录他们有username
=“ username”:

SELECT username FROM testingspeed WHERE username='username' ORDER BY RAND();

结果 :

Showing rows 0 - 29 (10,000 total, Query took 0.0119 sec).
id = 1 
select_type = SIMPLE
table = testingspeed
type = ref
posible_keys = username
key = username
key_len = 32
ref = const
rows = 3225
Extra = Using where; Using index; Using temporary; Using filesort

由于执行查询只花了0.0119秒,所以速度应该非常好,为什么人们仍然说不要使用ORDER BY
RAND()?为什么仅3225行受到影响?为什么不影响10,000行?


问题答案:

问题ORDER BY RAND()是您所解释的告诉您“使用临时文件”和“使用文件排序”。对于每个请求,都会创建一个临时表并进行排序。那是相当繁重的操作。当您的数据库不处于高负载状态时,这可能并不重要,但是它将花费很多性能。



 类似资料:
  • 这是我有生以来第一次发现自己正在编写一个开源的Java API。希望能被列入许多其他项目。 对于日志记录,我(以及与我一起工作的人)一直使用JUL(java.util.logging),从来没有遇到过任何问题。然而,现在我需要更详细地了解我应该为我的API开发做些什么。我对此做了一些研究,我得到的信息让我更加困惑。因此有了这篇文章。 因为我是从七月来的,所以我对此有偏见。我对其余的知识不是那么多。

  • 问题内容: 我阅读的源代码,很惊讶地发现它不使用Knuth–Morris–Pratt算法?众所周知,KMP更有效。那么为什么不使用它呢? 我周围的人告诉我,对于短字符串KMP来说已经足够了,但是如果您需要性能并且打算与大字符串一起使用,则不是一个好选择。但是他没有告诉我细节。 所以,这是我的问题: 为什么我们不使用KMP ? 为什么KMP对于大字符串不是一个好选择? 问题答案: KMP在最坏情况下

  • 问题内容: 据我所知,由于安全性,在JavaScript中使用JSON对象被认为是不好的做法。如果JSON来自其他服务器,我可以理解此问题。 但是,如果JSON是由我自己的服务器提供的,并且是使用PHP创建的(我们假设它不是越野车),那么简单地使用JS中的JSON读取是否合法,或者我目前无法想到任何安全问题? ? 我真的不想处理动态加载JSON解析器的问题,因此很高兴使用。 PS:很明显,我将使用

  • 我是一个新手,学习Javascript已经有一段时间了,唯一的目的是用它来编写硒自动化(最终的目的是李尔QA自动化)。 问题是,当谈到语言时,我完全感到困惑。我在Selenium文档和Scriptp示例中看到的都是类似“driver.FindElement”、“sendKeys”、“getTitle”等函数。 据我所知,(纯)Javascript不使用这些函数,而是使用“document.getE

  • eval 函数会在当前作用域中执行一段 JavaScript 代码字符串。 var foo = 1; function test() { var foo = 2; eval('foo = 3'); return foo; } test(); // 3 foo; // 1 但是 eval 只在被直接调用并且调用函数就是 eval 本身时,才在当前作用域中执行。 var fo

  • 问题内容: 为什么Hashtable不带钥匙? 另外,为什么HashMap允许键? 使这两个类的键行为如此不同的目的是什么? 问题答案: 从 JavaDoc: 简而言之,由于不是对象,因此无法调用或对其进行调用,因此无法计算哈希值以将其用作键。 较新,并且具有更高级的功能,基本上只是对功能的改进。这样,在创建时,它专门设计为将值作为键来处理,并将它们作为特殊情况来处理。 具体来说,在发出时,像这样

  • 问题内容: 众所周知,Java 中的接口已损坏。造成这种情况的原因很多,我将不再赘述。其他人已经做到了。这也是Java架构师本身的立场。 因此,我的问题是:为什么还不被弃用?如果核心Java团队已确定它已损坏,那么他们还必须考虑过时。他们反对这样做的原因是什么(在Java 8中仍不建议弃用)? 问题答案: 有一个错误在1997年提交给Java的错误数据库有关添加方法,所以将不再是无用的。它以“无法

  • 问题内容: 我曾经在hibernate 3中使用getHibernateTemplate(),现在我转向了Hibernate 4,在这里我找不到以下类: 在这里我已经阅读过有关它的更多信息,不建议使用 http://forum.springsource.org/showthread.php?117227-Missing-Hibernate- Classes-Interfaces-in-spring