mysql多数据表关联查询慢问题解决方案
问题一:遇到一个问题,mysql库下表A有几万条数据;表B也有几万条数据,结果两表关联的时候,查询超级慢,30s内没反应。
问题一解决方案:
1. 加索引,但索引不要乱加,两表关联,必须要创建的索引是两表的管理字段 e.g
select * from A t1 left join B t2 on t1.did= t2.did and t1.uid = t2.uid
这种情况下,一定要给A表的uid和did创建索引,如果uid值是唯一那就创建唯一所引UNIQUE;否则就创建normal索引。
基本上加索引之后,查询速度立马就秒级了。
有索引就像新华字典的目录一样按照a,b,c顺序排好序,查找时速率才会高。
问题二:查询语句,主表换了之后,也加了关联字段的索引,结果还是很慢,就很奇怪,只是主表换了而已
问题二解决方案:原来是两张表的字符集不一样,B表utf8(3个字节)和表A utf8mb4(4个字节)字符集兼容问题。
select * from A left join B where A.id = B.id A作为主表字符集包含B,可以很快查询导数据
select * from B left join A where A.id = B.id B作为主表则无法快速查询到数据,因为B无法兼容4个字符的数据,只能全表扫描
索引和主键的区别
索引分为:主键索引(SPATAIL)、唯一索引(UNIQUE)、常规索引(NORMAL)和全文索引(FULLTEXT);
创建索引一般为
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的
1.唯一性索引列允许空值,而主键列不允许为空值
2.主键列在创建时,已经默认为非空值 + 唯一索引了,在navicat中可能看不到,可以使用mysql查询语句来查看#show index from 表名;
3.主键可以被其他表引用为外键,而唯一索引不能
4. 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等
组合索引创建:
当我们的where查询存在多个条件查询的时候,我们需要对查询的列创建组合索引
减少开销:创建A B C 组合索引,相当于创建了(A)(A,B)(A,B,C)3个索引。 (a,b,c)多列索引和 (a,c,b)是不一样的
覆盖索引:查询 select A,B,C from 表名 ,由于查询的字段存在索引页中,那么可以从索引中直接获取,而不需要回表查询。
组合索引的生效原则从前往后依次使用生效,如果中间某个索引没有使用,那么断点前面的索引部分起作用,断点后面的索引没有起作用;
where a=1 and b=2 and c=3 .... 这种三个索引顺序使用中间没有断点,全部发挥作用;
where a=3 and c=5... 这种情况下b就是断点,a发挥了效果,c没有效果
where b=3 and c=4... 这种情况下a就是断点,在a后面的索引都没有发挥作用,这种写法联合索引没有发挥任何效果;
where b=45 and a=3 and c=5 .... 这个跟第一个一样,全部发挥作用,abc只要用上了就行,跟写的顺序无关
索引基本创建注意事项:
1. 索引不是越多越好,根据需要创建;对于重复数据的字段,没必要创建索引
2.涉及到关联表的一定要创建关联字段的索引
3. 一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引
4.使用短索引。对字符列进行索引,尽可能指定长度。短索引,不仅可以提高查询速度而且能节省磁盘空间
索引不生效的情况
1. 在索引字段上运算 where id-1=1 或者WHERE column(column)> 10;
2. 隐性转换。字符和数值型
3.like “%aaa%” "%aaa"不会使用索引而like “aaa%”可以使用索引
4.如果多个OR条件中有其中一个条件没有索引,则必须进行全表索引
什么情况下适合建立索引?
一般来说,在WHERE和JOIN中出现的列需要建立索引。因为MySQL只对,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引。
索引缺点
1..虽然索引大大提高了查询速度,同时会降低更新表的速度,如对表进行insert、update和delete。因为更新表时,不仅要保存数据,还要保存索引文件。
2.建立索引会占用磁盘空间的索引文件。如果你在一个大表上创建了多种组合索引,索引文件的会增长很快。
索引只是提高效率的一个因素,如果有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。
查看无效索引,清除无效索引?
查看索引是否生效:https://blog.csdn.net/u014470581/article/details/68065590
参考链接:https://www.cnblogs.com/yszr/p/10674729.html
mysql多数据表关联查询慢问题解决方案相关推荐
- ORACLE数据库多表关联查询效率问题解决方案
ORACLE数据库多表关联查询效率问题解决方案 参考文章: (1)ORACLE数据库多表关联查询效率问题解决方案 (2)https://www.cnblogs.com/baib/p/5086777.h ...
- MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?
这里写目录标题 MySQL多表关联查询对比多次单表查询,哪个效率高? 疑问: 高手解答: <阿里巴巴JAVA开发手册>里面写超过三张表禁止join 这是为什么?这样的话那sql要怎么写? ...
- Mysql多表关联查询
三表(replay_case.replay_task及general_flow)联合查询,注意select时,如果某个字段在不同的表中有重复的话需要指定具体的表,比如应该使用:select ...
- 2022/1/22 北京 mysql 多表关联查询,等值连接、非等值连接,外连接,内连接、自连接
一.笛卡尔积错误 要查询的俩个字段分别在俩张表 employee_id,department_name.所以要多表关联查询 select * from employees; -- 能查询出107条记录 ...
- MYSQL多表关联查询与子查询
多表关联查询 关联查询又名连接查询,其主要包括了内连接,外连接,自连接,交叉连接等四个大类. 首先我们要清楚我们为什么要使用多表关联查询,肯定是因为我们想要显示的数据来自于两个或多个数据表内部,我们想 ...
- MySQL多表关联查询与存储过程
-- **************关联查询(多表查询)**************** -- 需求:查询员工及其所在部门(显示员工姓名,部门名称) -- 1.1 交叉连接查询(不推荐.产生笛卡尔乘积 ...
- mysql 子表 关联查询语句_MySQL-基本查询语句及方法,连表和子查询
一.基本查询语句 create table emp( id intnotnull unique auto_increment, name varchar(20) notnull, sex enum(' ...
- mysql 子表 关联查询语句_MySQL基本SQL语句之单表查询、多表查询和子查询
一.简单查询: 基本语法:SELECT * FROM tb_name;查询全部 SELECT field1,field2 FROM tb_name; 投影 SELECT [DISTINCT] * FR ...
- mysql 子表 关联查询语句_mysql查询语句 和 多表关联查询 以及 子查询
1.查询一张表: select * from 表名: 2.查询指定字段:select 字段1,字段2,字段3-.from 表名: 3.where条件查询:select 字段1,字段2,字段3 from ...
最新文章
- 详解这场图片分类赛baseline,赢取官方人才认证+奖金
- 微信小程序 wxml 中使用 js函数
- 先验概率,后验概率,最大似然估计,最大后验概率
- 如何删除 AWS 资源以及关闭账户(来自亚马逊官方提供文档,记录一下方便查看)
- TypeScript 参数属性
- RxSwift之UI控件UITextField与UITextView扩展的使用
- Asp.Net Mvc - 在OnResultExecut* 拦截Action返回的HTML
- 反爬终极方案总结---字体反爬
- go将服务器图片响应给客户端,Go中来自客户端和服务器的RPC
- Codeforces Global Round 10
- vivo NEX 3S 5G今日登场:无界瀑布屏加持 世界随处可及
- 【Python3练习题 019】 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。...
- java 基本数据类型及自动类型转换
- cocos2d-x Schedule详解
- avs3 ts格式封装 标准_Go time.RFC3339 时间格式化
- Tomcat 设置系统默认文件编码
- xshell 官网下载
- Flash Builder4安装SVN插件
- matlab中变量的命名规则
- Windows中Redis的下载安装与修改密码并启动
热门文章
- 「微信群合影2.3.0」- 新增高清头像
- 2020计算机二级报名时间表下半年山东,2020年3月山东省计算机二级报名时间|网上报名入口【12月20日9:00开通】...
- 吉尔布雷斯的动作研究——《可以量化…
- 看看你的老祖宗是谁,姓氏血统图及各姓图腾
- 微信中域名网站域名被封锁、被屏蔽、被和谐后的解决方法
- Python Scrapy 上传图片到FastDfs(py3fdfs)
- Ubuntu20.04 添加右键新建文件
- item_search - 根据关键词获取义乌购商品列表
- 安装VS2010的SP1补丁的办法
- mac怎么强制退出程序,强制退出Mac程序,mac 强制退出程序