Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何强制MySQL忽略所有索引?

如何强制MySQL忽略所有索引?
EN

Database Administration用户
提问于 2015-08-11 10:04:15
回答 2查看 22.4K关注 0票数 13

我读过关于FORCE索引的文章,但是如何强制MySQL索引到IGNORE ALL索引呢?

我试过SELECT * FROM tbl IGNORE INDEX(*),但没有成功。

至于为什么我(和其他人)需要这样做:例如,我需要像这样总结tld的引用统计数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    count(*) as c, 
    SUBSTRING
    (
        domain_name, 
        LENGTH(domain_name) - LOCATE('.', REVERSE(domain_name)) + 2
    ) as tld
FROM `domains_import` 
    IGNORE INDEX(domain_name)
GROUP BY tld
ORDER BY c desc
LIMIT 100

...but --我总是要查看定义了哪些索引,或者通过解释来确定将使用什么索引。简单地编写IGNORE INDEX ALL而不关心它将是非常方便的。

有人知道语法或黑客吗?(通过MySQL定义表的几十行实际上不是捷径)。

聊天讨论:

中添加

贝赫马克:

  • 无指数= 148.5秒
  • 由于索引= 180秒,并且仍然在发送数据时,SSD数组非常强大,因此您几乎不关心数据缓存.

基准的定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE IF NOT EXISTS `domains_import` (
`domain_id` bigint(20) unsigned NOT NULL,
`domain_name` varchar(253) CHARACTER SET ascii COLLATE ascii_bin NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `domains_import`
ADD PRIMARY KEY (`domain_id`),
ADD UNIQUE KEY `domain_name` (`domain_name`);

ALTER TABLE `domains_import`
MODIFY `domain_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT;

InnoDB,带有索引的测试(没有使用索引()或类似的)仍然在运行,250秒,我刚刚杀死了它。

EN

回答 2

Database Administration用户

发布于 2015-08-11 12:10:01

您还可以嵌入WHERE 1=1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    count(*) as c, 
    SUBSTRING
    (
        domain_name, 
        LENGTH(domain_name) - LOCATE('.', REVERSE(domain_name)) + 2
    ) as tld
FROM `domains_import` 
WHERE 1=1
GROUP BY tld
ORDER BY c desc
LIMIT 100

约伯刚问我

Rolando,MySQL的优化器是如此愚蠢,以至于一个简单的总是真实的条件将禁止使用索引吗?

是的,但是您已经给了MySQL一个非常愚蠢的查询。1=1将恢复为聚集索引。尽管如此,还有另外一种方法,但它需要对优化器有一点恶意。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
    count(*) as c, 
    SUBSTRING
    (
        domain_name, 
        LENGTH(domain_name) - LOCATE('.', REVERSE(domain_name)) + 2
    ) as tld
FROM `domains_import` 
WHERE domain_name = domain_name
GROUP BY tld
ORDER BY c desc
LIMIT 100

这肯定会抛出总线下的每个索引,因为每一行的domain_name值都会被选中。如果domain_name是索引的,则必须为根本没有索引的WHERE column_name=column_name选择一列。

我刚刚在一个临时服务器的一个大表上尝试了这个

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql > explain SELECT COUNT(1) FROM VIDEO WHERE EMBEDDED_FLG=EMBEDDED_FLG;
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows   | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
|  1 | SIMPLE      | VIDEO | ALL  | NULL          | NULL | NULL    | NULL | 354327 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
1 row in set (0.00 sec)

不选择索引。

票数 2
EN

Database Administration用户

发布于 2015-08-17 17:15:22

假设您有这两个索引:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ADD PRIMARY KEY (`domain_id`),
ADD UNIQUE KEY `domain_name` (`domain_name`);

那么,优化器做什么并不重要;它必须从本质上扫描相同数量的东西。

案例1:它进行表扫描(或使用domain_id):它将扫描(id、name)对、定位所有名称、执行SUBSTRING..LOCATE、GROUP BY、最后ORDER。GROUP和ORDER可能都需要一个tmp表和文件。检查EXPLAIN SELECT ...,看看是否有。

案例2:它进行索引扫描( domain_name):该索引实际上包含(名称、id)对--因为InnoDB隐式地将PK放置在任何辅助键的末尾。其余的处理与案例1平行。

有一件事可能是不同的--两个BTrees的大小。执行SHOW TABLE STATUS LIKE domains_import以查看Data_length (用于案例1)和Index_length (用于案例2)。较大的BTree会变慢。

另一件事可能是不同的--缓存。innodb_buffer_pool_size的价值是什么?你有多少内存?数据(或索引)是否包含在缓冲池中?(或者说是37%,因为这是一个表/索引扫描?)如果符合,那么运行查询两次。第二次将是大约10倍的速度,因为没有击中磁盘(缓存)。

如果这是一次任务,SSD将有所帮助.如果没有,并且您可以缓存整个表,那么在加载buffer_pool之后它就不会起作用了。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/110707

复制
相关文章
time:Python的时间时钟处理
time库运行访问多种类型的时钟,这些时钟用于不同的场景。本篇,将详细讲解time库的应用知识。
luckpunk
2023/09/29
2770
time:Python的时间时钟处理
可以改变的量-变量
变量用来记录数值。使用变量进行代数计算,则该变量中数值可以随着程序的逻辑计算而改变。当计算全部结束后,再将数值拿出展示给用户。
星哥玩云
2022/09/14
3650
可以改变的量-变量
手动创建线程池
我们之所以要手动创建线程池,是因为 JDK 自带的工具类所创建的线程池存在一定的弊端,那究竟存在怎么样的弊端呢?首先来回顾一下 JDK 中线程池框架的继承关系:
用户4283147
2022/10/27
7250
手动创建线程池
RocketMQ手动创建Topic
创建Topic使用的命令 mqadmin updateTopic: .\mqadmin updateTopic Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in
青山师
2023/05/05
2.2K0
前端|创建简单动态时钟
动态时钟,就是通过CSS工具的美化效果和引入JavaScript,让网页呈现出钟表的动态效果,让它能够记录时间。通过改变背景颜色、指针颜色和阴影效果,让时钟呈现不同的颜色。
算法与编程之美
2020/08/10
1.7K0
前端|创建简单动态时钟
eclipse创建java项目无反应
系统升级到win10,重新安装eclipse,发现设置了原来的工作文件夹后,点击Java Project和Project都没有反应
全栈程序员站长
2022/11/17
1.1K0
eclipse创建java项目无反应
手动创建 SpringBoot Web 应用
1. 快速创建 ---- 官网位置 2. 手动创建过程(以IDEA为例) ---- 1. 创建Maven项目: File -> New -> Project 选择 Maven,然后点击 Next GroupId 一般为域名倒写,ArtifactId 一般为项目名,Version 为版本号,填写完毕之后,点击 Next 选择项目位置,点击 Finish 2. 添加依赖 3. 配置资源目录 File -> Project Structure Module -> Sources 将 src 设置成 Sources
山海散人
2021/03/03
9180
AI可以预测患者对免疫疗法的反应
发表在“The Lancet Oncology”上的一项研究首次证实,AI可以处理医学图像以提取生物学和临床信息。通过设计算法并将其开发用于分析CT扫描图像,Gustave Roussy,CentraleSupélec,Inserm,Paris-Sud University和TheraPanacea(专门从事AI的放射治疗和精密医学)的医学研究人员创建了一个所谓的放射学特征。该特征定义了肿瘤的淋巴细胞浸润水平,并提供了患者免疫治疗功效的预测评分。
AiTechYun
2018/09/26
6400
AI可以预测患者对免疫疗法的反应
Feign-手动创建FeignClient
在Feign-请求不同注册中心的服务中,提到,如果需要请求不同注册中心的服务,可以设置@FeignClient的url属性。
用户2146693
2019/08/08
3.8K0
Feign-手动创建FeignClient
Unity基础系列(一)——创建一个时钟(GameObjects与Scripts)
这篇教程是一个基础教程,会和大家一起创建一个简单的时钟,并且给它加上一些组件脚本用来显示当前时间。这篇教程的意义并不在于怎么学会写出一个时钟,而是教你认识Unity的编辑器。当然如果你之前已经接触过或者用过Unity了并且能自己找到场景窗口,那么就算是有个很好的开始了。
放牛的星星
2020/07/15
2.3K0
Django 创建一个返回当前时间的页面
修改 settings.py 文件, 把上面手动创建的 templates 文件夹路径添加进去
py3study
2020/01/17
9530
手动创建macOS恢复分区
因为某些原因需要制作macOS的恢复盘,但是苹果官方的OS X 恢复磁盘助理早已不支持APFS文件系统。
幻影龙王
2021/09/12
2.5K0
手动创建macOS恢复分区
长时间运行后无法创建session的问题
Jira Ticket: https://jira.mongodb.org/browse/SERVER-42827
MongoDB中文社区
2020/07/22
1.9K0
创建基本时钟周期约束
Xilinx建议把时序约束和物理约束分开来写。(但是必须有一个作为target) 时序约束用于综合和实现,物理约束用于实现。 1时钟周期 2占空比 3相位 Waveform={上升沿时刻,下降沿
瓜大三哥
2018/02/24
1.2K0
创建基本时钟周期约束
世界上最短的时钟代码!更短的,有木有?
该文介绍了如何用 Processing 语言实现时钟的绘制。首先介绍了 Processing 语言的用途,然后给出了一段示例代码,接着详细讲解了时钟绘制代码的实现细节。最后给出了一个在线演示链接,读者可以在线查看该时钟的绘制效果。
IMWeb前端团队
2017/12/29
1.2K0
时钟偏移是如何影响建立时间和保持时间的?
时钟偏移反映了时钟信号到达同一时序路径上的不同寄存器的时钟端口之间的时间差异,如下图所示。时钟clk从源端到达寄存器FF1的时间点为Tclk1,到达寄存器FF2的时间点为Tclk2,故时钟偏移即为Tclk2与Tclk1的差。若clk源端记为零时刻点,那么Tclk1和Tclk2分别对应发送时钟路径延迟和捕获时钟路径延迟。
Lauren的FPGA
2023/08/18
6380
时钟偏移是如何影响建立时间和保持时间的?
世界上最短的时钟代码!更短的,有木有?
Processing.js作者是John Resig,这是继Jquery之后,他的第二个力作。
IMWeb前端团队
2019/12/03
1.5K0
gPTP时钟同步(时间同步)协议简介
• 教官首先发出“齐步—–走”的命令,大家听到“齐步”二字后,开始调整动作,最终所有人实现动作同步。
NTP网络同步时钟
2022/03/09
9.1K1
gPTP时钟同步(时间同步)协议简介
点击加载更多

相似问题

对R中具有特定列条件的行进行计数

147

MySQL -对具有不同条件的组中的每一行进行计数()

22

对具有条件的多个列进行DISTINCT计数

15

具有两个不同列的条件的数据的条件计数公式

20

对某些日期具有相同列值的行进行计数

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文