- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
为什么这个选择,称之为A,(0.02406s):
select * from char_kills
where rid_first <= 110 and rid_last >= 110
order by kills desc
limit 500;
比排序顺序颠倒时慢 10 倍,称之为 B,(0.00229 秒):
select * from char_kills
where rid_first <= 110 and rid_last >= 110
order by kills
limit 500;
您如何优化 A?在 MySQL 5.5 上使用 InnoDB 表。
更多信息如下。
describe char_kills;
cid, int(10) unsigned, NO, PRI, ,
rid_first, int(10) unsigned, NO, PRI, ,
rid_last, int(10) unsigned, NO, PRI, ,
kills, int(11), NO, PRI, ,
offi_rank, smallint(5) unsigned, YES, , ,
select count(*) from char_kills;
146312
select count(*) from char_kills where rid_first <= 110 and rid_last >= 110;
7207
show indexes from char_kills;
char_kills, 0, PRIMARY, 1, kills, A, 160711, , , , BTREE, ,
char_kills, 0, PRIMARY, 2, rid_first, A, 160711, , , , BTREE, ,
char_kills, 0, PRIMARY, 3, rid_last, A, 160711, , , , BTREE, ,
char_kills, 0, PRIMARY, 4, cid, A, 160711, , , , BTREE, ,
一个:
Explain:
1, SIMPLE, char_kills, index, , PRIMARY, 16, , 500, Using where
Profiling:
0.02406750, select * from char_kills where rid_first <= 110 and rid_last >= 110 order by kills desc limit 500
starting, 0.000050
checking permissions, 0.000007
Opening tables, 0.000029
System lock, 0.000008
init, 0.000022
optimizing, 0.000008
statistics, 0.000013
preparing, 0.000012
executing, 0.000003
Sorting result, 0.000006
Sending data, 0.023822
end, 0.000007
query end, 0.000004
closing tables, 0.000015
freeing items, 0.000058
logging slow query, 0.000002
cleaning up, 0.000004
B:
Explain:
1, SIMPLE, char_kills, index, , PRIMARY, 16, , 500, Using where
Profiling:
0.00229975, select * from char_kills where rid_first <= 110 and rid_last >= 110 order by kills limit 500
starting, 0.000049
checking permissions, 0.000007
Opening tables, 0.000027
System lock, 0.000008
init, 0.000019
optimizing, 0.000008
statistics, 0.000012
preparing, 0.000009
executing, 0.000003
Sorting result, 0.000004
Sending data, 0.002091
end, 0.000004
query end, 0.000003
closing tables, 0.000010
freeing items, 0.000042
logging slow query, 0.000002
cleaning up, 0.000003
更多排列
慢:
where rid_first <= 110 and rid_last >= 110 order by kills desc limit 500; -- 0.031s, A, 7k matching rows
where rid_first >= 110 and rid_last <= 110 order by kills limit 500; -- 0.094s, 449 rows
快速:
where rid_first <= 110 and rid_last >= 110 order by kills limit 500; -- 0.000s, B
where rid_first <= 110 and rid_last <= 110 order by kills limit 500; -- 0.000s
where rid_first >= 110 and rid_last >= 110 order by kills desc limit 500; -- 0.000s
where rid_first <= 110 and rid_last <= 110 order by kills desc limit 500; -- 0.000s
where rid_first <= 110 and rid_last <= 110 order by kills desc limit 500; -- 0.000s
where rid_first <= 110 order by kills desc limit 500; -- 0.000s
where rid_last >= 110 order by kills desc limit 500; -- 0.000s
最佳答案
为什么会出现这种情况的答案是相当愚蠢的(并且在问题查询的大量发送数据时间中很明显):
将您的数据库(您可能知道,它存储为一个文件)想象成一个大的矩形 Jade 米田,您正站在它前面。如果你想从位于 Jade 米田 4 个角落的 Jade 米计划中采摘 Jade 米,那么从你面前的 Jade 米植物中采摘 Jade 米显然会更慢(因为你必须走很远)。
在计算机中,(在任何方面)距离都很重要,它以 IO 延迟表示(以及“未命中”以在某处找到预期信息)。
所以缓慢的原因是:a) 问题查询恰好需要从整个文件中读取数据(而不是像快速查询那样顺序读取)
b) 你最近没有对你的数据库进行碎片整理
c) 你的索引定义不当
编辑:为了清楚起见,查询找到所需记录的速度几乎一样快,因此问题不在索引或其定义中(至少不是最大的,尝试制作多列索引以包括您所有的列,只是为了测试)但是当查询说“好的,我知道现在一切都在哪里,让我去获取它以进行显示”<- 这个获取过程就是杀死其中一个的原因。
关于mysql - 倒序时选择慢10倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6367119/
自己试试看: import pandas as pd s=pd.Series(xrange(5000000)) %timeit s.loc[[0]] # You need pandas 0.15.1
我最近开始使用 Delphi 中的 DataSnap 来生成 RESTful Web 服务。在遵循 Marco Cantu 本人和互联网上其他几个人的指导后,我成功地使整个“链条”正常工作。 但是有一
我一直在为操作系统类(class)编写以下代码,但结果有些奇怪。该代码创建x线程并同时运行它们,以便将两个平方矩阵相乘。每个线程将输入矩阵的Number_of_rows/Number_of_threa
我正在尝试确定何时使用 parallel包以加快运行某些分析所需的时间。我需要做的一件事是创建矩阵,比较具有不同行数的两个数据框中的变量。我在 StackOverflow 上问了一个关于有效方法的问题
我最近对我的代码进行了一些清理,并在此过程中更改了此内容(不完全是真实的代码): read = act readSTRef test1 term i var = do t v^!terms.
我正在计时查询和同一个查询的执行时间,分页。 foreach (var x in productSource.OrderBy(p => p.AdminDisplayName) .Wher
我正在开发一个项目 (WPF),我有一个 Datagrid 从数据库加载超过 5000 条记录,所以我使用 BackgroundWorker 来通知用户数据正在加载,但它太慢了,我需要等待将近 2分钟
我在查询中添加 ORDER BY 时遇到问题。没有 ORDER BY 查询大约需要 26ms,一旦我添加 ORDER BY,它大约需要 20s。 我尝试了几种不同的方法,但似乎可以减少时间。 尝试 F
我是 Android 开发新手,遇到了性能问题。当我的 GridView 有太多项目时,它会变得有点慢。有什么方法可以让它运行得更快一些吗? 这是我使用的代码: 适配器: public class C
这里的要点是: 1.设置query_cache_type = 0;重置查询缓存; 2.在 heidisql(或任何其他客户端 UI)中运行任何查询 --> 执行,例如 45 毫秒 3.使用以下代码运行
想象下表: CREATE TABLE drops( id BIGSERIAL PRIMARY KEY, loc VARCHAR(5) NOT NULL, tag INT NOT
我的表 test_table 中的示例数据: date symbol value created_time 2010-01-09 symbol1
首先,如果已经有人问过这个问题,我深表歉意,至少我找不到任何东西。 无论如何,我将每 5 分钟运行一次 cron 任务。该脚本加载 79 个外部页面,而每个页面包含大约 200 个我需要在数据库中检查
我有下面的 SQL 代码,它来自 MySQL 数据库。现在它给了我期望的结果,但是查询很慢,我想我应该在进一步之前加快这个查询的速度。 表agentstatusinformation有: PKEY(主
我需要获取一个对象在 Core Data 中数千个其他对象之间的排名。现在,这是我的代码: - (void)rankMethod { //Fetch all objects NSFet
我正在编写一个应用程序,我需要在其中读取用户的地址簿并显示他所有联系人的列表。我正在测试的 iPhone 有大约 100 个联系人,加载联系人确实需要很多时间。 ABAddressBookRef ad
我正在使用 javascript 将 160 行添加到包含 10 列的表格中。如果我这样做: var cellText = document.createTextNode(value); cell.a
我是 Swift 的新手,我已经设置了一个 tableView,它从 JSON 提要中提取数据并将其加载到表中。 表格加载正常,但是当表格中有超过 10 个单元格时,它会变得缓慢且有些滞后,特别是它到
我在 InitializeCulture 和 Page_PreInit 事件之间的 asp.net 页面中遇到性能问题。当我重写 DeterminePostBackMode() 时,我发现问题出在 b
我在 Hetzner 上有一个带有 256GB RAM 6 个 CPU(12 个线程) 的专用服务器,它位于德国。我有 CENTOS 7.5。 EA4。 我的问题是 SSL。每天大约 2 小时,我们在
我是一名优秀的程序员,十分优秀!