1. MySQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都是以B-树的形式保存
  2. 如果没有索引,执行查询时,MySQL必须从第一个记录开始整表扫描,知道查询到符合要求的记录,记录越大,花费时间成本越高
  3. 如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录,即可迅速取得目标记录所在的位置
  4. 比如表有1000条记录,通过索引查找记录至少比顺序扫描记录快100倍

常见索引类型

  • normal 普通索引
  • unique 唯一索引,不允许重复的索引,该字段信息保证不会重复,譬如身份证号
  • full text 全文索引 用于搜索很长一篇文章的时候,效果最好;如果用在比较短的文本,就一两行字,普通的index也可以

总结:

索引的类别由建立索引的字段内容特性来决定,通常normal最常见

创建索引

alter table tabname add index idxname (column)

alter table tabname add unique (column)

alter table tabname add primary key(column)

create index idxname on tabname(column)

create unique index idxname on tabname(name)

删除索引

drop index idxname on tabname

alter table tabname drop index idxname

MySQL慢查询

show variables like "%slow%";

| slow_launch_time |  |  超过2秒定义为慢查询。
| slow_query_log | OFF | 慢查询关闭状态。
| slow_query_log_file | /data/mysql/var/db-Test2-slow.log | 慢查询日志的文件。
  • 开启慢查询
set global slow_query_log=on;
[mysqld]
log-slow-queries = /data/mysql/var/db-Test2-slow.log #日志目录。
long_query_time = #记录下查询时间查过1秒。
log-queries-not-using-indexes #表示记录下没有使用索引的查询。
  • mysqldumpslow分析日志
mysqldumpslow,使用很简单,参数可-help查看
-s:排序方式。
c , t , l , r 表示记录次数、时间、查询时间的多少、返回的记录数排序;
# ac , at , al , ar 表示相应的倒叙;
# -t:返回前面多少条的数据;
# -g:包含什么,大小写不敏感的;
mysqldumpslow -s r -t /data/mysql/var/db-Test2-slow.log

高效优化:三分配置、七分sql语句优化

  • 配置的优化

    • 系统内核优化
    • my.cnf配置文件
  • sql语句的优化
  • 表结构的优化
  • 索引的优化

硬件的优化

  • 增加内存和提高磁盘读写速度,都可以提高MySQL数据库的查询、更新速度
  • 使用磁盘阵列

参数的优化

  • 内存中会为MySQL保留部分的缓冲区
  • 缓冲区可以提高MySQL的速度
  • 缓冲区大小是在my.cnf配置文件中设置的

几个重要的内存参数

  • key_buffer_size 表示索引缓存的大小。值越大,使用索引进行查询的速度就越快
  • table_cache 表示同时打开的表的个数。值越大,能同时打开的表个数也就越多。不是越大越好,同时打开的过多的表会影响OS性能
  • query_cache_size 表示查询缓冲区的大小。使用查询缓冲区可以提高查询的速度。这个方式只适用于修改操作少且经常执行相同的查询操作情况,默认值是0
  • query_cache_type 表示查询缓冲区的开启状态。0表示关闭,1表示开启
  • max_connections 表示数据库的最大连接数。不是越大越好,过多的连接数会浪费内存资源
  • sort_buffer_size 排序缓冲区的大小,值越大,排序就越快
  • innodb_buffer_pool_size 表示innodb类型的表和索引的最大缓存,值越大,速度越快,同时影响OS性能
  • 一个真实的my.cnf
  •  [client]
    port =
    socket = /tmp/mysql.sock
    [mysqld]
    user = mysql
    server_id =
    port =
    socket = /tmp/mysql.sock
    datadir = /data/mysql/data1
    old_passwords =
    lower_case_table_names =
    character-set-server = utf8
    default-storage-engine = MYISAM
    log-bin = bin.log
    log-error = error.log
    pid-file = mysql.pid
    long_query_time =
    slow_query_log
    slow_query_log_file = slow.log
    binlog_cache_size = 4M
    binlog_format = mixed
    max_binlog_cache_size = 16M
    max_binlog_size = 1G
    expire_logs_days =
    ft_min_word_len =
    back_log =
    max_allowed_packet = 64M
    max_connections =
    max_connect_errors =
    join_buffer_size = 2M
    read_buffer_size = 2M
    read_rnd_buffer_size = 2M
    sort_buffer_size = 2M
    query_cache_size = 64M
    table_open_cache =
    thread_cache_size =
    max_heap_table_size = 64M
    tmp_table_size = 64M
    thread_stack = 192K
    thread_concurrency =
    local-infile =
    skip-show-database
    skip-name-resolve
    skip-external-locking
    connect_timeout =
    interactive_timeout =
    wait_timeout =
    #*** MyISAM
    key_buffer_size = 512M
    bulk_insert_buffer_size = 64M
    myisam_sort_buffer_size = 64M
    myisam_max_sort_file_size = 1G
    myisam_repair_threads =
    concurrent_insert =
    myisam_recover
    #*** INNODB
    innodb_buffer_pool_size = 16G
    innodb_additional_mem_pool_size = 32M
    innodb_data_file_path = ibdata1:1G;ibdata2:1G:autoextend
    innodb_read_io_threads =
    innodb_write_io_threads =
    innodb_file_per_table =
    innodb_flush_log_at_trx_commit =
    innodb_lock_wait_timeout =
    innodb_log_buffer_size = 8M
    innodb_log_file_size = 256M
    innodb_log_files_in_group =
    innodb_max_dirty_pages_pct =
    innodb_thread_concurrency =
    innodb_open_files =
    #innodb_force_recovery =
    #*** Replication Slave
    read-only
    #skip-slave-start
    relay-log = relay.log
    log-slave-updates

    my.cnf

mysql运维入门4:索引、慢查询、优化的更多相关文章

  1. mysql运维入门3:MyISAM和InnoDB

    myisam 5.1的默认存储类型 基于传统的ISAM类型,Indexed Sequential Access Method,有索引的顺序访问方法 存储记录文件的标准方法 不是事务安全,不支持外键 表 ...

  2. mysql运维入门6:MySQL读写分离

    Amoeba 以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy 集中想用应用的请求,根据用户事先设置的规则,将SQL请求发送到特定的数据库上执行 基于此可以实现负载均衡.读写分离 ...

  3. mysql运维入门5:MySQL+kepalived高可用架构

    keepalive 类似3/4/7层交换机制的软件,也就是平时说的第三层.第四层.第七层交换 作用是检测web服务器的状态,如果有一台web服务器.mysql服务器宕机.或工作出现故障,keepali ...

  4. mysql运维入门2:主从架构

    mysql主从原理 随着访问量的增加,数据库压力的增加,需要对msyql进行优化和架构改造,优化方法有: 高可用 主从复制 读写分离 拆分库 拆分表 原理 异步复制过程 master开启bin-log ...

  5. mysql运维入门1:基础及备份还原

    存储引擎 myisam 表强调的是性能 执行速度比innodb类型更快 不提供事务支持 如果执行大量的select操作,是首选 支持表锁,不支持行锁 innodb 提供事务支持.外键等高级数据库功能 ...

  6. Linux运维入门到高级全套常用要点

    Linux运维入门到高级全套常用要点 目 录 1. Linux 入门篇................................................................. ...

  7. mysql运维必会的一些知识点整理

    (1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...

  8. mysql运维必会的一些知识点整理(转自民工哥)

    (1)基础笔试命令考察 1.开启MySQL服务 /etc/init.d/mysqld start service mysqld start systemctl start mysqld 2.检测端口是 ...

  9. 搭建稳固的MySQL运维体系

    MySQL 监控要点 MySQL 监控要点,主要涉及服务器和 MySQL 两个方向的监控告警. 在这两个监控告警方向需要重点关注监控策略.监控趋势图及报警方式. 监控策略指的是每个监控项的告警阈值,例 ...

随机推荐

  1. 2019-2020-1 20199326《Linux内核原理与分析》第二周作业

    本周总结:本周的学习内容主要是庖丁解牛Linux的第一章,然后看完书后,又跟着云班课加深学习了一下第一章的内容.第一章主要讲述了linux里的汇编指令的一些指令,比如movl,pushl,popl等等 ...

  2. Linux 如何通过 iscsi target name 获取 ip

    by Mike Andrews # lsscsi -t [:::] disk iqn.-.com.blockbridge:t-pjxfzufjkp-illoghjk,t,0x1 /dev/sda [: ...

  3. Unity 极简UI框架

    写ui的时候一般追求控制逻辑和显示逻辑分离,经典的类似于MVC,其余大多都是这个模式的衍生,实际上书写的时候M是在整个游戏的底层,我更倾向于将它称之为D(Data)而不是M(Model),而C(Ctr ...

  4. opencv-6-图像绘制与opencv Line 函数剖析

    opencv-6-图像绘制与opencv Line 函数剖析 opencvc++qt 开始之前 越到后面, 写的越慢, 之前还抽空去看了下 学堂在线那篇文章提供的方法, 博客第一个人评论的我, 想想还 ...

  5. java 之 jsp详解

    jsp所需环境 eclipse JSP/Servlet 环境 jsp处理 以下步骤表明了 Web 服务器是如何使用JSP来创建网页的: 就像其他普通的网页一样,您的浏览器发送一个 HTTP 请求给服务 ...

  6. Eclipse插件svn和TortoiseSvn版本对应关系

    2019独角兽企业重金招聘Python工程师标准>>> 先说一下今天碰到问题,自己在建svn仓库和导入,导出时因为版本不一致导致的错误. 因此一定要保证Eclipse中svn插件版本 ...

  7. TCP连接过程及报文解析

    可能大家都听过TCP建立连接时需要经历三次握手和四次挥手的. 那么具体的握手挥手的过程是怎么样的呢? 这篇文章就通过WireShark抓包来了解TCP连接建立和断开的过程. 实验方法: 写一段简单的代 ...

  8. CSS开发技巧(一):button样式设置

    button样式需要注意的有几点: 1.建议有一个最小宽度,以免在文字很少时使得按钮过于窄,宽高不协调: 2.建议有一个padding,以免内部文本显得过于拥挤: 2.hover时需要有颜色变化,以告 ...

  9. 基于TCP的客户端和服务器端的代码设计

    实验平台 linux 实验内容 编写TCP服务器和客户端程序,程序运行时服务器等待客户端连接.一旦连接成功,服务器显示客户端的IP地址和端口号,并向客户端发送字符串 实验原理 TCP是面向连接的通信, ...

  10. Nginx模块开发(1)————类helloworld

    Nginx看了一点了,准备写个helloworld试试,觉得只看书的话很多东西都乱乱的,晕晕的,印象不深. 我的helloworld模块的目的就是:能够在浏览器里输入http://你的ip地址/lcw ...