以下思路均以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以及联合索引和索引多的弊端...相关推荐

  1. mysql 查询后怎么定位列_MySQL如何定位并优化慢查询sql

    1.如何定位并优化慢查询sql a.根据慢日志定位慢查询sql SHOW VARIABLES LIKE'%query%'     查询慢日志相关信息 slow_query_log 默认是off关闭的, ...

  2. PLC按条件查询MySQL/SQLServer/PostgreSQL数据库,将数据写入寄存器

    IGT-DSER智能网关模块,支持各种PLC.智能仪表.远程IO与数据库之间双向通讯,既可以读取设备的数据上报到SQL数据库,也可以从数据库查询数据后写入到设备:     PLC协议转HTTP    ...

  3. mysql图书管理数据库的三个关系模式_数据库 考虑如下关于图书馆的关系模式,用关系代数写出查询(数据库系统概念第六版6.14)...

    贝尔梅尔娜美 2019.03.15 采纳率:60%    等级:39 已帮助:91565人 数据库系统的基本概念 数据:实际上就是描述事物的符号记录. 数据的特点:有一定的结构,有型与值之分,如整型. ...

  4. MySQL快速比较数据库表数据

    1. 前言 有时需要比较MySQL不同数据库间结构相同的表数据是否相同,例如在测试环境与生产环境之间比较,或多个测试环境之间比较,以下提供一种通用的快速比较方式. 2. 比较方法 对于需要比较数据的数 ...

  5. MySQL:创建数据库,数据表,主键和外键

    目录 前言: 安装MySQL: 打开MySQL: 创建数据库: 查看已建数据库: 查看数据库引擎: 创建数据表: 主键约束: 单字段主键: 多字段联合主键: 外键约束: 前言: MySQL数据库安装了 ...

  6. mysql tables rows_MySQL数据库查看数据表占用空间大小和记录数

    MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHE ...

  7. mysql批量创建数据库 导数据

    由于近来需要从其它机器拉一堆数据到一台机器上做数据分析,由于涉及到数据库比较,数据也不大不小的,要手工一个一倒腾真是累的半死,于是弄了个脚本 实现功能,根据指定文件下的数据库文件命令格式, str=1 ...

  8. mysql两个数据库表数据同步_php同步mysql两个数据库中表的数据

    分别创建两个数据库和两张表 study库-zone表 teaching库-area表 //****SQL脚本****// 1.创建teaching数据库area数据表 create database ...

  9. mysql insert into select大量数据插入比较慢_史上最全MySQL锁机制

    本文主要记录学习MyISAM 和 InnoDB 这两个存储引擎. 为什么要学习锁机制 锁是计算机协调多个进程或线程并发访问某一资源的机制. 因为数据也是一种供许多用户共享的资源,如何保证数据并发访问的 ...

最新文章

  1. python opencv调节图片亮度与对比度
  2. 通过PowerShell开源社区的Win32-OpenSSH来管理你的Windows服务器
  3. vue2.0读书笔记2-进阶
  4. python中的id()函数及读取list的例子
  5. python统计字符在文件中出现的次数_一文搞定统计字符串中某字符出现的频次
  6. 简单使用AutoMapper实现DTO转换
  7. 测试思路系列:《谷歌的软件测试之道》读书笔记
  8. python 整合同类数据求分位值_【利用python进行数据分析】数据聚合与分组运算...
  9. keep 虚拟路线修改器_从初音未来到歌王子殿下,尚未VTuber化的虚拟偶像
  10. 关于时间轴发展历程等PPT模板展现方式的探讨
  11. Mac 在当前目录打开终端
  12. AOP之基于Schema配置总结与案例
  13. (文献研读)ContainerCloudSim:云数据中心中容器建模和仿真的环境
  14. ospf(开放式最短路径优先协议)
  15. Apache Pulsar:实时数据处理中消息,计算和存储的统一
  16. wps服务器无响应是什么原因,windows10系统运行wps无响应的解决方案
  17. 宝塔环境使用微软OneDrive云盘免费自动备份网站数据最佳方案!
  18. 【分享】“小鹅通“在集简云平台集成应用的常见问题与解决方案
  19. LeetCode知识点总结 - 347
  20. 如何预防网站http劫持问题?

热门文章

  1. python 经典排序算法
  2. SQL2012 之 创建备份计划
  3. 【2018.6.7】阶段总结
  4. 51Nod - 1183 编辑距离
  5. 404页面自动跳转javascript
  6. Web.Config文件配置之数据库连接配置
  7. linux基础知识——僵尸进城和孤儿进程
  8. 【计算机网络复习 数据链路层】3.4.1 流量控制与可靠传输机制
  9. Hadoop伪分布式配置和搭建,hadoop单机安装,wordcount实例测试,hadoop安装java目录怎么找,问题及问题解决方法
  10. 计算机组成原理——机器字长、指令字长、存储字长