- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一张表tb_profilecomments:
4,3 GiB -- 总计 800 万行 -- InnoDB
有 3 个索引:
我运行的查询很简单:
SELECT *
FROM tb_profilecomments
WHERE profilecomment_user_id=6430
ORDER BY profilecomment_id DESC
在不到 1 秒的时间内获得结果(16.000 多行)。当我现在将 LIMIT 1, 5
添加到查询中时,我必须等待超过 2 分钟才能获得结果。
不知道 mysql 后台发生了什么,为什么它会如此严重地减慢查询速度。
当我从查询中删除 ORDER BY
或 LIMIT
时,一切正常。
按非索引 profilecomment_date
列排序时,速度很慢(7 秒),但不像使用索引主键 profilecomment_id
排序和限制时那样需要 2 分钟.
你知道哪里出了问题吗?可能是坏索引?如何查明?怎么修? ANALYZE TABLE 显示消息“ok”。
解释 tb_profilecomments:
显示创建表tb_profilecomments:
结果 EXPLAIN SELECT * FROM tb_profilecomments WHERE profilecomment_user_id=6430 ORDER BY profilecomment_id DESC LIMIT 1, 5
:
最佳答案
索引中的行是非常明确地排序的。仅限 ASC
。即使是 5.7 手册页也说
An index_col_name specification can end with ASC or DESC. These keywords are permitted for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order.
MySQL 一直都有这个限制。 (升级无济于事。)
但是...这不会阻止代码以 DESC
顺序交付结果。
也就是说,MySQL 没有 DESC 索引的不足并不重要。这是一个重要的例子:ORDER BY x ASC, y DESC
。无法构建(在 MySQL 中)INDEX
来有效处理该问题。
您的查询的最佳索引是
INDEX(user_id, comment_id);
user_id
将用于WHERE user_id = _constant_
,然后 comment_id
将以相反的顺序扫描以获得您想要的行。有或没有 LIMIT
。
但是...索引必须处理所有的WHERE
、GROUP BY
和
会短路执行。 (否则,在可以应用 LIMIT
之前的 ORDER BYLIMIT
之前,存在文件排序、tmp 表等。)
对于超慢查询,请提供 EXPLAIN SELECT ...
和(如果可能)EXPLAIN FORMAT=JSON SELECT ...
。
不要将 PRIMARY KEY
放在 InnoDB 表上!这是非常需要的。 (好吧,如果你要更换它,就把它扔掉。)
关于mysql - 添加带有 LIMIT 的 ORDER BY 时,简单的 MySQL 查询被阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32285359/
我想使用 li 和 ul 制作一个多级下拉列表,以便显示我博客中按年和月排序的所有文章。我希望我的下拉菜单看起来像 Google Blogspot 下拉菜单: 这是我的 CSS 和 HTML 代码 u
我在 Win 7 64 机器上将 CodeBlocks 与 gcc 4.7.2 和 gmp 5.0.5 结合使用。开始使用 gmpxx 后,我看到一个奇怪的段错误,它不会出现在 +、- 等运算符中,但
我正在使用 tern 为使用 CodeMirror 运行的窗口提供一些增强的智能感知,它工作正常,但我遇到了一个问题,我想添加一些自定义“types”,可以这么说,这样下拉列表中它们旁边就有图标了。我
我正在尝试让我的 PC 成为 Android 2.3.4 设备的 USB 主机,以便能够在不需要实际“附件”的情况下开发 API。为此,我需要将 PC 设置为 USB 主机和“设备”(在我的例子中是运
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我在设置服务器方面几乎是个新手,但遇到了一个问题。我有一个 Ubuntu 16.04 VPS 并安装了 Apache2 和 Tomcat7。我正在为 SSL 使用 LetsEncrypt 和 Cert
我在一个基于谷歌地图的项目上工作了超过 6 个月。我使用的是 Google Maps API V1 及其开发人员 API key 。当我尝试发布应用程序时,我了解到 Google API V1 已被弃
我是 Python 的新手,所以如果我对一些简单的事情感到困惑,请原谅。 我有一个这样的对象: class myObject(object): def __init__(self):
这个问题已经有答案了: How can I access object properties containing special characters? (2 个回答) 已关闭 9 年前。 我正在尝
我有下面的 CSS。我想要的是一种流体/液体(因为缺乏正确的术语)css。我正在为移动设备开发,当我改变模式时 从纵向 View 到陆地 View ,我希望它流畅。现在的图像 在陆地 View 中效
我正在尝试使用可以接受参数的缓存属性装饰器。 我查看了这个实现:http://www.daniweb.com/software-development/python/code/217241/a-cac
这个问题在这里已经有了答案: Understanding slicing (36 个答案) 关闭 6 年前。 以a = [1,2,3,4,5]为例。根据我的直觉,我认为 a[::-1] 与 a[0:
mysqldump -t -u root -p mytestdb mytable --where=datetime LIKE '2014-09%' 这就是我正在做的事情,它会返回: mysqldum
我正在制作销售税计算器,除了总支付金额部分外,其他一切都正常。在我的程序中,我希望能够输入一个数字并获得该项目的税额我还希望能够获得支付的总金额,包括交易中的税金。到目前为止,我编写的代码完成了所有这
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我是否必须进行任何额外的设置才能让 apache-airflow 在任务失败时向我发送电子邮件。我的配置文件中有以下内容(与默认值保持不变): [email] email_backend = airf
这个问题在这里已经有了答案: What does the $ symbol do in VBA? (5 个回答) 3年前关闭。 使用返回字符串(如 Left)的内置函数有什么区别吗?或使用与 $ 相同
我有一个用VB6编写的应用程序,我需要使用一个用.NET编写的库。有什么方法可以在我的应用程序上使用该库吗? 谢谢 最佳答案 这取决于。您可以控制.NET库吗? 如果是这样,则可以修改您的库,以便可以
当我创建一个以 ^ 开头的类方法时,我尝试调用它,它给了我一个错误。 class C { method ^test () { "Hi" } } dd C.new.test; Too m
我已经使用 bower 安装了 angularjs 和 materialjs。 凉亭安装 Angular Material 并将“ngMaterial”注入(inject)我的应用程序,但出现此错误。
我是一名优秀的程序员,十分优秀!