mysql索引过多为什么会慢_mysql – 为什么索引使这个查询更慢?

摘要

问题是由于b-trees的性质,字段不适合索引.

说明

假设你有一张表有500,000个掷硬币的结果,其中抛掷是1(头)或0(尾):

CREATE TABLE toss (

id int NOT NULL AUTO_INCREMENT,

result int NOT NULL DEFAULT '0',

PRIMARY KEY ( id )

)

select result, count(*) from toss group by result order by result;

+--------+----------+

| result | count(*) |

+--------+----------+

| 0 | 250290 |

| 1 | 249710 |

+--------+----------+

2 rows in set (0.40 sec)

如果你想选择一个折腾(随机)折腾尾巴,那么你需要搜索你的桌子,挑选一个随机的起始位置.

select * from toss where result != 1 limit 123456, 1;

+--------+--------+

| id | result |

+--------+--------+

| 246700 | 0 |

+--------+--------+

1 row in set (0.06 sec)

explain select * from toss where result != 1 limit 123456, 1;

+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+

| 1 | SIMPLE | toss | ALL | NULL | NULL | NULL | NULL | 500000 | Using where |

+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+

您看到您基本上按顺序搜索所有行以查找匹配项.

如果在折腾字段上创建索引,则索引将包含两个值,每个值大约有250,000个条目.

create index foo on toss ( result );

Query OK, 500000 rows affected (2.48 sec)

Records: 500000 Duplicates: 0 Warnings: 0

select * from toss where result != 1 limit 123456, 1;

+--------+--------+

| id | result |

+--------+--------+

| 246700 | 0 |

+--------+--------+

1 row in set (0.25 sec)

explain select * from toss where result != 1 limit 123456, 1;

+----+-------------+-------+-------+---------------+------+---------+------+--------+-------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+-------+---------------+------+---------+------+--------+-------------+

| 1 | SIMPLE | toss | range | foo | foo | 4 | NULL | 154565 | Using where |

+----+-------------+-------+-------+---------------+------+---------+------+--------+-------------+

现在您搜索的记录较少,但搜索时间从0.06增加到0.25秒.为什么?因为顺序扫描索引实际上比顺序扫描表的效率低,对于给定键具有大量行的索引.

我们来看看这个表上的索引:

show index from toss;

+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |

+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

| toss | 0 | PRIMARY | 1 | id | A | 500000 | NULL | NULL | | BTREE | |

| toss | 1 | foo | 1 | result | A | 2 | NULL | NULL | | BTREE | |

+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+

PRIMARY索引是一个很好的索引:有500,000行,有500,000个值.安排在BTREE中,您可以根据ID快速识别单行.

foo索引是一个错误的索引:有500,000行,但只有2个可能的值.对于BTREE来说,这几乎是最糟糕的情况 – 搜索索引的所有开销,仍然需要搜索结果.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pythonweb管理电脑_Python远程控制局域网计算机网络远程控制软件Python的开发,python,电脑,web...

[Python] 纯文本查看 复制代码import web import osimport timefrom PIL import ImageGrabimport numpy as npimport cv2urls (/reboot_html/(.*), reboot_html,/jp_html/(.*), jp_html,/shutdown_html/(.*), shutdown_html,/(js|css|images)/(.*), static)app web.applicati…

ctf的php,CTF中常见的PHP漏洞

1.MD5()漏洞php在处理字符串时会利用!,||,进行hash值的比较 他把每一个“0E’开头的哈希值都解释为0,因此如果两个不同的密码经过hash处理之后都是以‘0e’开头,那么PHP会认为两者是相同的,南京邮电大学一次…

php ob 缓存,php中ob函数缓冲机制深入理解

下面就php中ob函数缓冲机制通过文字说明加代码分析的形式给大家展示如下:对于一个刚刚入门的php程序员来说,php缓冲区是几乎透明的。在他们心目中,一个echo print_r 函数,数据便会‘嗖的一声飞到浏览器上,显示出来。我…

php极光推送教程,laravel框架使用极光推送消息操作示例

本文实例讲述了laravel框架使用极光推送消息。分享给大家供大家参考,具体如下:最近需要使用极光推送往客户端推消息,所以这里记录下使用过程。极光推送的服务端文档:https://docs.jiguang.cn/jpush/server/push/server_overview/极…

php 强制刷新,web端实现后退强制刷新功能代码

本文主要和大家介绍了微信web端后退强制刷新功能的实现代码,需要的朋友可以参考下,希望能帮助到大家。具体代码如下所示://生成uuidvar uuidChars "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");fu…

php强制cookies,php Cookies操作类(附源码)

本cookies操作类的功能,包括:1,保存,读取,更新,清除cookies数据。2,可设置前缀。3,强制超时控制。4,cookies数据可以是字符串,数组,对象等。1&…

php 缩略图 失真,WORDPRESS缩略图失真变形模糊的解决方法

众所周知,网站最怕改版,其中一个主要的原因就是缩略图的问题,旧模板的缩略图尺寸不一定适合新版的模板缩略图尺寸要求,尽管后台的设置-多媒体-缩略图尺寸修改了,可这是新上传的图片才会生成新的尺寸的缩略图&#xff0…

php表单 提交数据,PHP表单提交数据

1.PHP表单处理PHP 超全局变量 $_GET 和 $_POST 用于收集表单数据GET 和 POST 都创建数组(例如,array( key > value, key2 > value2, key3 > value3, ...))。此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。…

binarysearch java,java数据结构之二分查找法 binarySearch的实例

java数据结构之二分查找法 binarySearch的实例折半查找法,前提是已经排好序的数组才可查找实例代码:public class BinarySearch {int[] bArr;public void setArr(int[] bArr){this.bArrbArr;}public static void main(String[] args) {int arrLength16;i…

matlab dotline,基于模糊控制的路径规划算法的仿真实现---Matlab程序.rar

【实例简介】与 本人博客中的课程论文《基于模糊控制的路径规划算法的仿真实现》相配套,可以相互参阅【实例截图】【核心代码】基于模糊控制的路径规划算法的仿真实现---Matlab程序├── fuzzy4│ ├── CheckIsBlocked.asv│ ├── CheckIsBlocked.m│ ├…

php重定义地址栏url,thinkphp框架实现路由重定义简化url访问地址的方法分析

本文实例讲述了thinkphp框架实现路由重定义简化url访问地址的方法。分享给大家供大家参考,具体如下:如果按照正常访问的话,则需要输入一长串的url地址,这样会显得十分冗长,我可以可以通过对路由规则的重新定义简化url访…

php 数组 json字段去不全,json_encode – PHP给出了不完整的json字符串

首先我的环境:PHP 5.3.2 – 使用Suoshin和xCache的lighttpd / 1.4.26我的代码太多了,不能在这里发布.我会说出来的.文件x.php正在加载一些PHP – Classe,初始化它们,执行一些函数 – >获取Result数组.如果我print_r这个数组我得到一个完整的结果.但是我使用json_…

java 判断季节,Java-用switch判断季节

import java.util.*;class Demo3{public static void main(String[] args){//需求 :输入一个月份 ,判断月份属于哪一个季节 :春天:3,4,5//夏天 :6,7,8 ,秋天:9,10,11 冬天:12&#x…

matlab jp2格式,JP2文件扩展名_JP2是什么格式_JP2文件怎么打开-文件百科

JPEG 2000标准是由联合图像专家组(JPEG)委员会在1990年代后期开发的,以代替1992年发布的JPEG标准。它对JPEG格式进行了一些改进,采用小波压缩算法,不会产生原先的基于离散余弦变换的JPEG标准产生的块状模糊瑕疵。JPEG 2000使用小波变换、画布…

PPT下载下来是php,用php下载jpg,doc,ppt文件已损坏

我试图用php下载一些文件来隐藏文件路径,但是一些文件类型总是被破坏。像PDF和MP3文件类型很好。像doc,PPT,JPG等文件类型总是下载破碎。我使用这些mimetypesif (file_exists($file_real)){$extension strtolower(substr(strrchr($file, &qu…

php安装文档,PHP - Manual: 安装 (官方文档)

安装安装此 PECL 扩展相关的信息可在手册中标题为PECL扩展的安装章节中找到。更多信息如新的发行版本、下载、源文件、维护人员信息及变更日志等,都在此处: https://pecl.php.net/package/cairo.PECL 扩展的DLL 当前不可用。参见在 Windows 上构建章节。…

php mail laravel,邮件 - Laravel - 为 WEB 艺术家创造的 PHP 框架。

邮件配置Laravel的邮件功能构建于流行的SwiftMailer库之上,并提供了简介、高效的API。邮件配置信息在app/config/mail.php文件中,并提供了包含SMTP主机、端口和证书的配置选项,也可以为发送的邮件配置一个全局from(来自)地址。你可以使用任何…

php抓取带帐号密码,PHP实现抓取迅雷VIP账号的方法_PHP

本文实例讲述了PHP实现抓取迅雷VIP账号的方法。分享给大家供大家参考。具体如下:看了Jinn_Wei Python版本的抓取账号,于是顺手写了个PHP版本PS1:代码没经过优化,只实现了基本的功能PS2:代码中使用了SnoopyPS3&#xff…

php输入安全验证漏洞,PHP 输入验证错误漏洞

来源:MLIST链接:https:/3 N x 6/lists.deC w c F K Y x bian.org/debian-lts-announce/2020/10/msg00008.html来源:MISC链接:http://cS | / O ?ve.circl.lu/cve/CH P / 3VE-2020-8184来源:MISC链接:https:/? 2 ( 4/bugs.php.net/buX / d 2 # } Lg.php?id79699来源:FEDORA链…

oracle 主键约束重名,主键及主键索引的关系及相互影响

主键的定义:列或多列的集合,用于唯一的标识表中的一行。一个表上只允许有一个主键。我们在数据库中指定主键时,是通过主键约束来定义的。而创建主键约束时,又是需要有相应的索引来配合实现的。所以,本文的目的是总结创…