10 | MySQL为什么有时候会选错索引?

如果使用索引 a,每次从索引 a 上拿到一个值,都要回到主键索引上查出整行数据,这个代价优化器也要算进去的。

而如果选择扫描 10 万行,是直接在主键索引上扫描的,没有额外的代价。

优化器会估算这两个选择的代价,从结果看来,优化器认为直接扫描主键索引更快。

当然,从执行时间看来,这个选择并不是最优的。

不过需要注意的是,文章中给出的几个选错索引的例子都没有浮现出来。

原文地址:https://www.cnblogs.com/lakeslove/p/12246312.html

时间: 2024-10-14 01:17:27

10 | MySQL为什么有时候会选错索引?的相关文章

mysql为什么有些时候会选错索引

1.基本概念 在MySQL中一张表其实是可以支持多个索引的.但是,你写SQL语句的时候,并没有主动指定使用哪个索引.也就是说,使用哪个索引是由MySQL来确定的. 一般在数据库使用的时候回遇到这样的问题,一条本来可以执行很快的语句,却由于MySQL选错了索引,导致执行速度变得很慢. 举例说明: 我们先建一个简单的表,表里有a.b两个字段,并分别建上索引: CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b`

MySQL之 index merge 走错索引案例

条件:MySQL 版本:percona server 5.5.18 sql优化案例一: [email protected] 5.5.18-log cayenne 11:30:37>desc select id, grant_credit_task_id, product_id, product_code, user_id, member_id, user_credit_money, product_credit_money, real_product_credit_money, credit_s

mysql选错娱乐平台源码搭建索引的原因与处理

mysql选错娱乐平台源码搭建<企娥21717 93408>索引的原因与处理1执行计划预估行数错误2order by和主键类型不同导致 索引基数一个索引上不同的值越多,这个索引的区分度就越好.而一个索引上不同的值的个数,我们称之为"基数"(cardinality).也就是说,这个基数越大,索引的区分度越好.我们可以使用 show index方法,看到一个索引的基数.MySQL 是怎样得到索引的基数的呢?  这里,我给你简单介绍一下 MySQL 采样统计的方法.为什么要采样统

mysql count(*) 会选哪个索引?

今天在查询一个表行数的时候,发现count(1)和count(*)执行效率居然是一样的.这跟Oracle还是有区别的.遂查看两种方式的执行计划: mysql> select count(1) from customer; +----------+ | count(1) | +----------+ | 150000 | +----------+ 1 row in set (0.03 sec) mysql> flush tables; Query OK, 0 rows affected (0.0

10 MySQL索引选择与使用

索引概述 每种存储引擎对每个表至少支持16个索引,总索引长度至少256字节. MyISAM和InnoDB的表默认创建BTREE索引.MEMORY引擎默认使用HASH索引,但也支持BTREE MySQL目前不支持函数索引,但支持前缀索引. MyISAM支持的前缀索引最大长度为1000字节;InnoDB支持的前缀索引最大程度是767字节. CREATE TABLE 创建索引时是按照字符数计量的,所以对于多字节的字符集,要考虑字符和字节的关系. MySQL还支持FULLTEXT(全文本)索引,用于全文

MySql存储引擎+表解压缩机制+索引+查询缓存机制+慢查询日志

一.大型网站优化之MySql优化 1.优化和不优化的对比的 在业界当中我们有一个叫大数据(big data)的概念,所谓的大数据指代千万级别以上的数据作为起步的数据.所以我们现在需要对两张都具有50331650条记录的表进行查询对比,其中表名为tbl_no的表是没有做过任何优化手段的表,表名为tbl_yes的表是做过优化手段的表.这个实验的目的是观察具有优化手段和不具有优化手段的查询中速度的差别. 实验条件: 1)两张表的数据记录总数是相同的 2)两张表的数据字段结构也是一样的 3)查询的记录的

Mysql数据库理论基础之四 --- 表和索引的管理

一.简介 由MySQL AB公司开发,是最流行的开放源码SQL数据库管理系统,主要特点: 1.是一种数据库管理系统 2.是一种关联数据库管理系统 3.是一种开放源码软件,且有大量可用的共享MySQL软件 4.MySQL数据库服务器具有快速.可靠和易于使用的特点 5.MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中 二.MySQL 存储引擎,也称表类型 2.1. 单字段:    PRIMARY KEY 主键 UNIQUE KEY 唯一键 2.2 单或者多字段:    PRIMARY KE

一次MySQL线上慢查询分析及索引使用

本文由作者郑智辉授权网易云社区发布. 0.前言 本文通过分析线上MySQL慢查询日志,定位出现问题的SQL,进行业务场景分析,结合索引的相关使用进行数据库优化.在两次处理问题过程中,进行的思考. 1.简要描述 在九月底某个新上的游戏业务MySQL慢查询日志 # Time: 2017-09-30T14:56:13.974292+08:00 # Query_time: 6.048835  Lock_time: 0.000038 Rows_sent: 0  Rows_examined: 1288441

MySQL优化GROUP BY-松散索引扫描与紧凑索引扫描

满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有).在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建临时表. 为GROUP BY使用索引的最重要的前提条件是所有GROUP BY列引用同一索引的属性,并且索引按顺序保存其关键字.是否用索引访问来代替临时表的使用还取决于在查询中使用了哪部分索引.为该部分指定的条件,以及选择的累积函数. 由于GROUP BY 实际上也同样会进行排序操作,而