首页 > 数据库 >mysql 索引优化2

mysql 索引优化2

时间:2023-12-14 14:33:27浏览次数:32  
标签:count id 索引 mysql 优化 主键 select

对于关联sql的优化 关联字段加索引,让mysql做join操作时尽量选择NLJ算法 小表驱动大表,写多表连接sql时如果明确知道哪张表是小表可以用straight_join写法固定连接驱动方式,省去 mysql优化器自己判断的时间   in和exsits优化 原则:小表驱动大表,即小的数据集驱动大的数据集 in:当B表的数据集小于A表的数据集时,in优于exists 1 select * from A where id in (select id from B)2 #等价于: 3 for(select id from B){ 4 select * from A where A.id = B.id 5 } exists:当A表的数据集小于B表的数据集时,exists优于in 将主查询A的数据,放到子查询B中做条件验证,根据验证结果(true或false)来决定主查询的数据是否保留 1 select * from A where exists (select 1 from B where B.id = A.id) 2 #等价于: 3 for(select * from A){ 4 select * from B where B.id = A.id 5 } 6 7 #A表与B表的ID字段应建立索引     count(*)查询优化   字段有索引:count(*)≈count(1)>count(字段)>count(主键 id) //字段有索引,count(字段)统计走二级索引,二 级索引存储数据比主键索引少,所以count(字段)>count(主键 id)   字段无索引:count(*)≈count(1)>count(主键 id)>count(字段) //字段没有索引count(字段)统计走不了索引, count(主键 id)还可以走主键索引,所以count(主键 id)>count(字段)      注意:count(id) 在mysql内部如果有二级索引,会走二级索引,如果没有会走主键索引   count(1)跟count(字段)执行过程类似,不过count(1)不需要取出字段统计,就用常量1做统计,count(字段)还需要取出 字段,所以理论上count(1)比count(字段)会快一点。 count(*) 是例外,mysql并不会把全部字段取出来,而是专门做了优化,不取值,按行累加,效率很高,所以不需要用 count(列名)或count(常量)来替代 count(*)。 为什么对于count(id),mysql最终选择辅助索引而不是主键聚集索引?因为二级索引相对主键索引存储数据更少,检索 性能应该更高,mysql内部做了点优化(应该是在5.7版本才优化)。    

标签:count,id,索引,mysql,优化,主键,select
From: https://www.cnblogs.com/javatk/p/17901105.html

相关文章

  • MySQL:SQL 错误 [1118] [42000]: Row size too large.
    1.场景:今天在用MySQL建表的时候,报了一个错误;SQL错误[1118][42000]:Rowsizetoolarge.Themaximumrowsizefortheusedtabletype,notcountingBLOBs,is65535.Thisincludesstorageoverhead,checkthemanual.YouhavetochangesomecolumnstoTEXTor......
  • 图像识别的精度与效率优化研究
    基于深度学习的图像识别算法研究摘要:随着深度学习技术的快速发展,基于深度学习的图像识别算法已经成为计算机视觉领域的研究热点。本文将介绍基于深度学习的图像识别算法的基本原理、研究进展和应用领域,并探讨其未来的发展趋势。一、引言深度学习是一种基于神经网络的机器学习方......
  • MySQL运维4-Mycat入门
    一、mycat概述mycat是阿里巴巴企业下的开源的,基于JAVA语言编写的MySQL数据库中间件,可以像使用MySQL一样来使用Mycat,对于开发人员来说根本感觉不到mycat的存在。之前在国内使用数据库分库分表,读写分离最主流的就是使用mycat,但是截止到今日2023-12-13日,mycat的网站的下载链接......
  • mysql的备份方法详解
    MySQL数据库备份是确保数据安全的重要步骤。有多种备份方法可用,以下是几种常见的MySQL备份方法:1.使用mysqldump命令行工具:mysqldump是MySQL提供的备份工具,通过命令行使用。以下是基本的备份和恢复示例:备份整个数据库:mysqldump-uusername-pdatabase_name>backup.sql......
  • 开源 Serverless 框架 Laf 性能优化实践
    介绍Laf是一个完全开源的Serverless框架,Laf的Node.js运行时容器(以下简称为Runtime)是Laf的函数执行环境,依托于Express.js框架。采用容器进程常驻的方式,每一个应用对应于一个或多个容器(弹性伸缩下),底层使用了Node.js的vm模块,使用MongoDB的watch()方法来监......
  • JavaWeb - day07 - MySQL - DQL、多表设计
    01.MySQL-DQL-基本查询介绍DQL英文全称是DataQueryLanguage(数据查询语言),用来查询数据库表中的记录。查询关键字:SELECT查询操作是所有SQL语句当中最为常见,也是最为重要的操作。在一个正常的业务系统中,查询操作的使用频次是要远高于增删改操作的。当我们打开某个网站或APP......
  • MySQL使用JSON存储数据
    1.优点1.不用为数据中的每个key值新建一个字段,可以任意的增减字段而无需修改数据表结构,甚至可以减少数据表的设计。2.可以减少数据表的查询,减少关联查询,一个查询的结果就可以代替几个查询的结果,降低数据库服务器的压力。2.缺点1、json数据仅仅只能用于展示display,如果用于条件......
  • 使用NineData,轻松完成阿里云RDS MySQL至ClickHouse数据迁移
    云数据库RDSMySQL和云数据库ClickHouse是阿里云推出的两个备受欢迎的数据库解决方案,它们为用户提供了可靠的数据存储方案、分析数仓方案,本文介绍如何快速将RDSMySQL的数据同步到云数据库ClickHouse。如何快速将RDSMySQL的数据同步到云数据库为什么要将RDSMySQL的......
  • mysql_repl - 轻便型的MySQL binlog replication tool
    mysql_repl-轻便型的MySQLbinlogreplicationtoolhttps://github.com/hcymysql/mysql_repl/使用场景:从MySQL8.0实时解析binlog并复制到MariaDB,适用于将MySQL8.0迁移至MariaDB不熟悉MySQL主从复制搭建的新手使用原理:把自己伪装成slave,从源master解析binlog并入库targetMySQL端......
  • MySQL左连接丢失null值的问题
    一、前言我们有的时候直接使用左连接查询,当右表不存在该数据的时候,是可以查出带有null的列。可是当在where条件中有右表相关的筛选条件时,我们惊奇的发现查询的结果不带null值了,换句话说就是查出来的结果比预期的少。二、错误复现以及解决方案1、右表不带筛选条件的查询sql相关......