- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经在 SO 上阅读了与我类似的问题并谷歌搜索了好几天,但似乎找不到适合我的情况的解决方案。请参阅下面的详细信息。当我运行下面的 sql 语句时,它需要一分钟多的时间。它也没有使用 tableA.col4 上的索引。为什么?
就像我说的,我已经在谷歌上搜索了很长一段时间,但现在似乎在兜圈子。非常感谢任何帮助!
---细节---(抱歉太长了,但我想最好有所有信息)
我有以下两个表,表 A 和表 B:
tableA:(500 万行...最终将是 2000 万行)
tableA | CREATE TABLE `tableA` (
`col1` varchar(50) NOT NULL,
`col2` int(10) NOT NULL DEFAULT '0',
`col3` varchar(300) DEFAULT NULL,
`col4` varchar(50) DEFAULT NULL,
`col5` datetime DEFAULT NULL,
PRIMARY KEY (`col1`,`col2`),
KEY `col4` (`col4`),
KEY `col5` (`col5`),
KEY `col1` (`col1`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
表A的索引:
+---------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tableA | 0 | PRIMARY | 1 | col1 | A | NULL | NULL | NULL | | BTREE | | |
| tableA | 0 | PRIMARY | 2 | col2 | A | 4780162 | NULL | NULL | | BTREE | | |
| tableA | 1 | col4 | 1 | col4 | A | 426 | NULL | NULL | YES | BTREE | | |
| tableA | 1 | col5 | 1 | col5 | A | 2390081 | NULL | NULL | YES | BTREE | | |
| tableA | 1 | col1 | 1 | col1 | A | 2390081 | NULL | NULL | | BTREE | | |
+---------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
tableB:(100 万行...最终将达到 500 万左右)
| tableB | CREATE TABLE `tableB` (
`col1` varchar(300) NOT NULL DEFAULT '',
`col2` varchar(300) DEFAULT NULL,
`col3` int(10) DEFAULT NULL,
`col4` varchar(300) DEFAULT NULL,
`col5` varchar(300) DEFAULT NULL,
`col6` varchar(300) DEFAULT NULL,
`col7` varchar(300) DEFAULT '0',
`col8` varchar(300) DEFAULT '0',
`col9` varchar(300) DEFAULT '0',
`col10` varchar(300) DEFAULT NULL,
`col11` varchar(300) DEFAULT NULL,
`col12` mediumtext,
`col13` decimal(15,2) DEFAULT NULL,
`col14` decimal(15,2) DEFAULT NULL,
`col15` varchar(300) DEFAULT NULL,
`col16` varchar(300) DEFAULT NULL,
`col17` decimal(15,2) DEFAULT NULL,
`col18` decimal(15,2) DEFAULT NULL,
`col19` varchar(300) DEFAULT NULL,
`col20` varchar(300) DEFAULT NULL,
`col21` decimal(15,2) DEFAULT NULL,
`col22` decimal(15,2) DEFAULT NULL,
`col23` varchar(300) DEFAULT NULL,
PRIMARY KEY (`col1`),
KEY `col3` (`col3`),
KEY `col5` (`col5`),
KEY `col2` (`col2`),
KEY `col1` (`col1`),
FULLTEXT KEY `col12` (`col12`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
表A的索引:
+----------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+----------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tableB | 0 | PRIMARY | 1 | col1 | A | 989765 | NULL | NULL | | BTREE | | |
| tableB | 1 | col3 | 1 | col3 | A | 9799 | NULL | NULL | YES | BTREE | | |
| tableB | 1 | col5 | 1 | col5 | A | 98976 | NULL | NULL | YES | BTREE | | |
| tableB | 1 | col2 | 1 | col2 | A | 197953 | NULL | NULL | YES | BTREE | | |
| tableB | 1 | col1 | 1 | col1 | A | 989765 | NULL | NULL | | BTREE | | |
| tableB | 1 | col12 | 1 | col12 | NULL | 1 | NULL | NULL | YES | FULLTEXT | | |
+----------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
解释:
EXPLAIN SELECT *
FROM tableA LEFT OUTER JOIN tableB ON tableA.col1 = tableB.col1
WHERE tableA.col4 NOT IN ('8/G','2','9/D','7','6/M') ORDER BY tableA.col5 DESC LIMIT 25
+----+-------------+----------+--------+-------------------+---------+---------+-----------------------+---------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+----------+--------+-------------------+---------+---------+-----------------------+---------+-----------------------------+
| 1 | SIMPLE | tableA | ALL | col4 | NULL | NULL | NULL | 4780162 | Using where; Using filesort |
| 1 | SIMPLE | tableB | eq_ref | PRIMARY, col1 | PRIMARY | 902 | mydb.tableA.col1 | 1 | |
+----+-------------+----------+--------+-------------------+---------+---------+-----------------------+---------+-----------------------------+
分析:
Status Time
starting 0.000012
Waiting for query cache lock 0.000003
checking query cache for query 0.000079
checking permissions 0.000004
checking permissions 0.000003
Opening tables 0.000013
System lock 0.000006
Waiting for query cache lock 0.000027
init 0.000028
optimizing 0.000008
statistics 0.000404
preparing 0.000009
executing 0.000003
Sorting result 2.135376
Sending data 0.004359
Waiting for query cache lock 0.000004
Sending data 0.004735
Waiting for query cache lock 0.000004
....
....
....
Sending data 0.008573
Waiting for query cache lock 0.000006
Sending data 0.005630
Waiting for query cache lock 0.000005
Sending data 0.005760
Waiting for query cache lock 0.000005
Sending data 0.005295
Waiting for query cache lock 0.000005
Sending data 0.005239
Waiting for query cache lock 0.000004
Sending data 0.004954
Waiting for query cache lock 0.000004
Sending data 82.246597
end 0.000012
query end 0.000004
closing tables 0.000009
freeing items 0.000014
logging slow query 0.000002
logging slow query 0.000003
cleaning up 0.000003
最佳答案
It also is not using the index on tableA.col4. Why?
嗯,tableA.col4 NOT IN ('8/G','2','9/D','7','6/M') 是罪魁祸首。 MySQL 确实不能使用索引来满足 NOT IN。
发生的事情是 MySQL 正在运行 tableA 的所有约 500 万行并构建一组行,其中 tableA.col4 NOT IN ('8/G','2','9/D','7 ', '6/M').然后按 col5 降序排序,然后(希望如此)从中挑选出前 25 行,然后执行连接。
tableA 上的 col5 和 col4(按此顺序)的多列索引可能有助于此查询,因为我相信 MySQL 将以相反的顺序处理索引,并在它获得满足 tableA 的 25 行后停止。 col4 NOT IN ('8/G','2','9/D','7','6/M').
所以我的建议是:
CREATE INDEX ix_tableA_col5_col4 ON tableA(col5,col4);
然后重新运行您的查询。
关于mysql - 另一个 "Why is this statement running slowly"查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13545939/
我已经通过 AVD 管理器启动了我的模拟器,一旦它运行,我点击了 run app。我已经等了几分钟,我的正在运行的设备出现在 选择一个正在运行的设备 中,但窗口始终保持空白。 最佳答案 您正在运行的项
我想在安装新数据库之前删除旧数据库,以便为用户更新它。 我有以下情况: 在我的 Components 部分中,我为用户提供了一个选项: [Components] Name: "updateDataba
如果我将一个 Python 模块实现为一个目录(即包),它同时具有顶级函数 run 和子模块 run,我可以指望 from example import run 总是导入函数?根据我的测试,至少在 L
我在 Eclipse Juno 上使用 Tomcat 7。我使用工作区元数据作为服务器位置(请参阅下面的我的 tomcat 配置)。 我也收到了 服务器项目在 eclipse [请看下图] 中使用单独
我正在做一些测试以了解 java 中的不同线程状态,并且遇到了一些查询。 通常,当一个线程被实例化时,它被称为处于 "NEW" 状态,然后当调用它的 start() 方法时,操作系统调度程序获得控制权
当我使用命令 npm run build -- --prod 时,我收到以下错误消息: 属性“PropertyName1”是私有(private)属性,只能在“AppComponent”类中访问 “A
我正在尝试将默认的“运行”键盘快捷键更改为 ⌘R。 - 因为我不想每次都伸手去拿触控板,而且我的手指不够长,无法一次执行⌥⇧F10。 “运行”和“运行...”有什么区别? 最佳答案 ... 用于菜单中
我现在不知道如何编写一个合适的方法来测试这种行为。请不要投反对票.. 我现在有一个 java 类负责处理数据并将数据添加到多个数据库。每个数据库都保存相同的数据,但处理方式不同(例如,以不同的插值率进
我知道不应该调用 run 方法来启动新线程执行,但我指的是 this article他们在另一个 run 方法中调用了 runnable.run(); ,这似乎暗示它启动了一个新线程或者根本没有cre
当我尝试在Windows 10/11下使用Eclipse 2023-06调试任何应用程序(甚至是hello.c)时,我总是收到以下错误:。该错误清楚地指示-(错误2)-路径是错误的。。我试图在互联网上
在运行vue文件时,需要进行npm操作,但我们发现,有时候用的是npm run serve,而有的时候用的是npm run dev,二者有什么区别 在我们运行一些 vue 项目的时候,输入npm ru
我想在 cloud run 上运行一个长时间运行的作业。该任务可能执行超过 30 分钟,并且主要发送 API 请求。cloud run 在大约 20 分钟后停止执行,从指标来看,它似乎没有识别出我的任
我们无法让 SSE 从 Google Cloud Run 上的容器发送。我已经尝试使用一个简单的 SSE 示例( https://github.com/kljensen/node-sse-exampl
直到最近,我一直在执行这个美丽来构建 + 运行一个带有堆栈的项目: stack build && .stack-work/install/x86_64-linux/lts-4.1/7.10.3/bin
我们有一个小脚本,可以抓取网页(约 17 个条目),并将它们写入 Firestore 集合。为此,我们在 Google Cloud Run 上部署了一项服务。 这段代码的执行需要大约 5 秒 when
我是Docker的新手,我知道一种运行交互式容器的方法如下: $ docker run -it image-name bash 要么 $ docker run -it image-name /bin/
Dockerfile 中的多个 RUN 条目之间有什么区别,例如: FROM php:5.6-apache RUN docker-php-ext-install mysqli RUN apt upda
对于来自文档的云运行内存使用情况 ( https://cloud.google.com/run/docs/configuring/memory-limits ) Cloud Run applicati
今天早上我更新了我的 Ubuntu 版本,现在我无法从 eclipse 运行我的应用程序。 问题是,当我单击“运行方式”时出现的列表是空的,我无法运行任何内容。 我该如何解决这个问题? 我能看到的唯一
我正在 intelliJ 上使用 livereload 测试 spring-boot-devtools。我有一个简单的 SpringBootApplication,可以正常工作。 当我从 maven
我是一名优秀的程序员,十分优秀!