mysql联合索引数据库查询数据会变慢_如何定位并优化慢查询SQL以及联合索引和索引多的弊端...
以下思路均以Mysql为例,不过SQL调优通用的
根据慢日志定位慢查询SQL;
使用show variables like ‘%quer%’;主要查看slow_query_log,slow_query_log_file,long_query_time;这三个是主要关注和修改的变量。
show status like ‘%slow_queries%’; ——查询慢查询的数量。
set global slow_query_log = on; ——设置打开慢查询日志;set global long_query_time = 1; ——设置大于1s的查询都属于慢查询;( 这个需要重连数据库才能更新的);并且以上修改在重启数据库之后会重置成原来的设置,如果需要永久修改的话就需要到my.cmf(linux)或my.ini(windows)的配置文件到修改好对应的值。
使用explain等工具分析SQL;
在SQL语句前使用explain执行分析语句,优先观察三个字段:id,type,extra;(其他字段的作用请网上查询);其中id越大,代表越先执行,type为all则代表全表扫描,extra为using filesort或using temporary 都是可选优化的。
修改SQL或者尽量让SQL走索引。
创建联合索引
建表时:
CREATE TABLE test (
‘a’ INT(11) NOT NULL DEFAULT ‘’,
‘b’ INT(11) NOT NULL DEFAULT ‘’,
‘c’ INT(11) NOT NULL DEFAULT ‘’,
‘d’ INT (11) UNSIGNED NOT NULL DEFAULT 0,
KEY sindex (a, b, c,‘d’)
) ENGINE = MyISAM COMMENT = ‘’;
建表后:
alert table test add INDEX sindex (a,b,c,‘d’) ;
最左匹配原则:
mysql会一直向右匹配直到遇到范围查询(>、5 and d=6 ,如果像上面一样建立(a,b,c,d)联合索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整;
=和in可以乱序,比如a = 1 and b = 2 and c = 3建立(a,b,c)索引可以任意顺序,mysql的查询优化优化器会帮你优化成索引可以识别的形式;
成因:
mysql创建复合索引的规则是首先会对复合索引的最左边,也就是索引中的第一个字段进行排序,在第一个字段排序的基础上,在对索引上第二个字段进行排序,其实就像是实现类似order by 字段1,字段2这样的排序规则,那么第一个字段是绝对有序的,而第二个字段就是无序的了,因此一般情况下直接只用第二个字段判断是用不到索引的,这就是为什么mysql要强调联合索引最左匹配原则的原因。
索引是越多越好么
答案是否定的
数据量小的表不需要建立索引,建立会增加额外的索引开销
数据变更需要维护索引,意味着更多的索引意味着更多的维护成本
更多的索引也需要跟多的存储空间
mysql联合索引数据库查询数据会变慢_如何定位并优化慢查询SQL以及联合索引和索引多的弊端...相关推荐
- mysql 查询后怎么定位列_MySQL如何定位并优化慢查询sql
1.如何定位并优化慢查询sql a.根据慢日志定位慢查询sql SHOW VARIABLES LIKE'%query%' 查询慢日志相关信息 slow_query_log 默认是off关闭的, ...
- PLC按条件查询MySQL/SQLServer/PostgreSQL数据库,将数据写入寄存器
IGT-DSER智能网关模块,支持各种PLC.智能仪表.远程IO与数据库之间双向通讯,既可以读取设备的数据上报到SQL数据库,也可以从数据库查询数据后写入到设备: PLC协议转HTTP ...
- mysql图书管理数据库的三个关系模式_数据库 考虑如下关于图书馆的关系模式,用关系代数写出查询(数据库系统概念第六版6.14)...
贝尔梅尔娜美 2019.03.15 采纳率:60% 等级:39 已帮助:91565人 数据库系统的基本概念 数据:实际上就是描述事物的符号记录. 数据的特点:有一定的结构,有型与值之分,如整型. ...
- MySQL快速比较数据库表数据
1. 前言 有时需要比较MySQL不同数据库间结构相同的表数据是否相同,例如在测试环境与生产环境之间比较,或多个测试环境之间比较,以下提供一种通用的快速比较方式. 2. 比较方法 对于需要比较数据的数 ...
- MySQL:创建数据库,数据表,主键和外键
目录 前言: 安装MySQL: 打开MySQL: 创建数据库: 查看已建数据库: 查看数据库引擎: 创建数据表: 主键约束: 单字段主键: 多字段联合主键: 外键约束: 前言: MySQL数据库安装了 ...
- mysql tables rows_MySQL数据库查看数据表占用空间大小和记录数
MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHE ...
- mysql批量创建数据库 导数据
由于近来需要从其它机器拉一堆数据到一台机器上做数据分析,由于涉及到数据库比较,数据也不大不小的,要手工一个一倒腾真是累的半死,于是弄了个脚本 实现功能,根据指定文件下的数据库文件命令格式, str=1 ...
- mysql两个数据库表数据同步_php同步mysql两个数据库中表的数据
分别创建两个数据库和两张表 study库-zone表 teaching库-area表 //****SQL脚本****// 1.创建teaching数据库area数据表 create database ...
- mysql insert into select大量数据插入比较慢_史上最全MySQL锁机制
本文主要记录学习MyISAM 和 InnoDB 这两个存储引擎. 为什么要学习锁机制 锁是计算机协调多个进程或线程并发访问某一资源的机制. 因为数据也是一种供许多用户共享的资源,如何保证数据并发访问的 ...
最新文章
- python opencv调节图片亮度与对比度
- 通过PowerShell开源社区的Win32-OpenSSH来管理你的Windows服务器
- vue2.0读书笔记2-进阶
- python中的id()函数及读取list的例子
- python统计字符在文件中出现的次数_一文搞定统计字符串中某字符出现的频次
- 简单使用AutoMapper实现DTO转换
- 测试思路系列:《谷歌的软件测试之道》读书笔记
- python 整合同类数据求分位值_【利用python进行数据分析】数据聚合与分组运算...
- keep 虚拟路线修改器_从初音未来到歌王子殿下,尚未VTuber化的虚拟偶像
- 关于时间轴发展历程等PPT模板展现方式的探讨
- Mac 在当前目录打开终端
- AOP之基于Schema配置总结与案例
- (文献研读)ContainerCloudSim:云数据中心中容器建模和仿真的环境
- ospf(开放式最短路径优先协议)
- Apache Pulsar:实时数据处理中消息,计算和存储的统一
- wps服务器无响应是什么原因,windows10系统运行wps无响应的解决方案
- 宝塔环境使用微软OneDrive云盘免费自动备份网站数据最佳方案!
- 【分享】“小鹅通“在集简云平台集成应用的常见问题与解决方案
- LeetCode知识点总结 - 347
- 如何预防网站http劫持问题?