优化哪些方面

1.表设计上

范式,存储引擎,字段类型

2.功能上

索引,缓存,分区

3.sql语句上

合理sql,经验

4.架构上

主从复制,负载均衡,读写分离

存储引擎

存储引擎是真正存储数据的地方

Mysql 5.5

1 不支持事务

2 表级锁

3 数据和索引是分开存储

4  insert ,select 适合高速插入和检索。(bbs,博客)

5 可压缩

6 全文索引(全文搜索)full index

快 糙 猛  php  mysql

压缩

INnodb

*************************** 8. row ***************************

Engine: InnoDB

  1. 事务处理
  2. 行级锁  并发性
  3. 按照主键排序
  4. 外键,维护数据完整性  (逐渐淡化)
  5. 考虑CPU效率和处理大数据的最佳性能
  6. 数据和索引一块存储
  7. 5.6.4开始支持全文索引

Innodb表的文件

ibdata1  这是所有的innodb表的表空间文件

开启这个选项(mysql 5.6自动开启)

mysql> show variables like 'innodb_file_per_table%';

+-----------------------+-------+

| Variable_name         | Value |

+-----------------------+-------+

| innodb_file_per_table | ON    |

+-----------------------+-------+

1 row in set (0.00 sec)

锁的概念

出现争夺资源。

读锁.    共享锁.   一个进程在读取某表的时候,另一个进程也可以读取.但是当前进程仅仅能读取这个表,而不能操作其他表.

写锁.     独占锁.  一个进程在写表时,是不允许另一个进程写,当前进程仅仅能操作这一个表.

锁的范围,精细程度上。

Myisam表是表级锁。    Innodb是行级锁。

表级锁:  开销小,加锁时间短。

行级锁:相反。

Myisam和innodb的比较

Innodb:数据完整性,并发性好。事务,且是默认表引擎

适合银行转账,等数据安全要求高的应用

  • Myisam:压缩存储,适合 insert和select多的应用,博客,BBS等
  • 高速并发插入,
  • 压缩:
  • 压缩后的数据
  • 压缩后,不能再对表进行写操作
  • 解压缩

除非考虑到innodb不支持的特性,否则就优先选择innodb存储引擎。

其他的存储引擎

  • Archive

    • 归档型。  Insert  select 日志
  • Memory
    • 内存型.支持insert,update,delete,select.数据不能过大。
  • merge
    • 合并多个相同结构的myisam表。
    • 应用于 项目中的水平拆分。单表记录过大。

索引

索引也是一种结构。从数据记录里提取出关键字,可以是某列,某些列,或者是列的一部分。关键字和数据记录仍然保持原来的关联关系。

删除索引

alter table mycom drop index comnum

去除索引的情况

索引的种类

索引  某列,某些列,某列的部分。

  1. Primary 主键索引   不重复,不为空,不能为0
  2. Key 普通索引  没什么要求
  3. Unique 唯一索引  不重复,可以为null,
  4. Fulltext  全文索引    列是 varchar,char,text.没什么要求。 关键字来自列的部分

共同点:都是从数据记录里提取出的关键字。都为了查询提速。

差异性:就是关键字的要求不同。

复合索引。 关键字来源于多个列。

前缀索引。 关键字来自于某列的前N个字符。

索引的使用

@ SQL执行计划  explain

使用索引时的情况。

explain select * from mycom where con=12345656

没有使用索引时的结果

Mysql 5.5之前,explain只能针对select,现在insert ,update,delete都可以。

@  检索数据时使用  where

Where  字段名=字段值,

加索引的列,数值分布比较广泛。Where sex=’1’分布不广泛。

索引是占据硬盘空间。影响写数据的速度。

@  排序时也可以使用  order by

排序字段comname加上了索引后

Using  filesort  排序 。外部排序(硬盘上,mysql使用order by ). (内部排序,冒泡排序是一个例子)

@索引覆盖

查询时索引覆盖了数据。

查询的数据,直接在索引中就有,而索引在内存中,查询时候不需要去数据区中检索,直接在索引中就可以查到。

使用索引需要注意的地方

列独立

左原则

复合索引中,查询时只要用到了最左边的列,就能应用上索引。

Like   ‘abc%’,’abcd_%’ 只要以确定的字符开始的,也可以使用索引。

Order by

Or

Or两端的字段,必须都建立索引,才有可能使用。

列类型是字符串,字符常量没有使用引号

Name Varchar,char(),’abcdef’,’123456’

Select * from user where name=’123456’ //name字段建立索引,就会使用。

Select * from user where name=123456 //有可能不使用索引

存在索引,使用也正确,但是不使用

Select * from user where col>1 and <90 (均匀分布时)

Select * from mycom where comnum > 12990

Mysql智能化的选择结果。

Mysql觉得 在索引和数据之间来回切换,造成的开销比实际使用索引要大,放弃使用索引。

全文索引

解决like

Like  ‘%美食%’;

Field  regexp  ‘’;

全表扫描。

Fulltext

使用全文索引的方式查询

全文索引默认不支持中文,因为:

  1. 英文天然以空格为区分,分割符。中文没有。
  2. 中文分词。有一套关键字词库。
  3. Sphinx,可以作为mysql插件来使用。只支持俄文和英文,Coreseek中文包。
  4. lucence
  5. 核心功能:建立全文索引,中文分词。

前缀索引

关键字的提取,是某个列的前N个字符

前N个字符,所达到的辨识度无限接近于使用整个字段达到的辨识度。

Create Index  索引名  on  表名  (field(N))

N到底是多少?

经过测试 N=9

Create  index preindex on mycom (pass(9))

索引覆盖。应用不了前缀索引。

其他优化的地方

只查询相关的列

Select id,name,

一旦涉及到数据库迁移,或者表结构修改等情况下,会造成大面积的修改代码。

慎用select  *

节省带宽的功能。

分解复杂查询

禁用子查询,join.。这些操作涉及锁。影响并发。

不宜建立索引的列

优化group by

使用order by null 避免group by 时默认的排序

优化insert

Insert into test values(1,2),(3,4) 多个value的情况

分区

适合数据量1亿条以上的表。

Mysql 5.1

Show variables  like ‘%partition%’

Show plugins;

*************************** 42. row ***************************

Name: partition

Status: ACTIVE

Type: STORAGE ENGINE

Library: NULL

License: GPL

Partition

分区语法

Create  table

Key(),hash(),list(),range()

查询缓存

mysql> show variables like '%query_cache%';

+------------------------------+---------+

| Variable_name                | Value   |

+------------------------------+---------+

| have_query_cache             | YES     |

| query_cache_limit            | 1048576 |

| query_cache_min_res_unit     | 4096    |

| query_cache_size             | 1048576 |

| query_cache_type             | OFF     |    //是否开启查询缓存

| query_cache_wlock_invalidate | OFF     |

+------------------------------+---------+

6 rows in set (0.00 sec)

需要在配置文件设置 query_cache_type=On|1

慢查询日志

可以为当前进程开启。

慢查询日志,不是优化措施,它可以帮助我们找到那些查询超过某个时间点的SQl语句。

常见mysql优化 面试题相关推荐

  1. mysql优化-面试题

    第一方面:30种mysql优化sql语句查询的方法        1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 whe ...

  2. 常见数据库优化面试题

    常见数据库面试题 一.在项目中如何定位慢查询 通过 druid 连接池的内置监控来定位慢 SQL. 通过 MySQL 的慢查询日志查看慢 SQL. 通过 show processlist,查看当前数据 ...

  3. 面试题:在日常工作中怎么做MySQL优化的?

    前言 MySQL常见的优化手段分为下面几个方面: SQL优化.设计优化,硬件优化等,其中每个大的方向中又包含多个小的优化点 下面我们具体来看看 SQL优化 此优化方案指的是通过优化 SQL 语句以及索 ...

  4. mysql索引优化笔试题_索引优化策略面试题

    A:用了c1,c2,c3,c4(mysql没你傻,它知道在不影响语义的情况下换下顺序) B:用了c1,c2,c3,而c4没有(在c3后就中断了) C:用到了c1 如果是order by c2,c3 则 ...

  5. mysql 优化关键字_Mysql之Explain关键字及常见的优化手段

    Explain关键字字段描述: Explain关键字字段详情描述 id 我们写的查询语句一般都以SELECT关键字开头,比较简单的查询语句里只有一个SELECT关键字,但是下边两种情况下在一条查询语句 ...

  6. 常见的MySQL优化方案1

    前言:我们先了解一下sql性能优化 性能优化(Optimize)指的是在保证系统正确性的前提下,能够更快速响应请求的一种手段.而且有些性能问题,比如慢查询等,如果积累到一定的程度或者是遇到急速上升的并 ...

  7. mysql优化和sql优化一样吗_mysql数据库的sql优化原则和常见误区

    gistfile1.txt 优化目标 1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作 所占用的,减少 IO 次数 ...

  8. MySQL索引面试题:优化 索引分类

    索引分类: 主键索引(PRIMARY):它 是一种特殊的唯一索引,不允许有空值. 唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值. 普通 ...

  9. MySQL优化系列_常见的sql使用-Mysql中的实践(Mysql优化系列8)

    看完了工具,死磕算法,那么怎么从算法和工具去解决我们忽略的用法呢,下面我们来个小试牛刀. 表table employees (id,name,age,position )几个字段 name, age, ...

  10. 简单mysql优化_mysql常见语句的简单优化策略

    常见sql优化方法 (1)优化insert语句 大批量插入数据: 对于Myisam类型的表,可以通过以下方式快速的导入大量的数据. ALTER TABLE tblname DISABLE KEYS; ...

最新文章

  1. Shiro集成Web时的Shiro JSP标签
  2. mysql5.7设置SQL Mode
  3. touchWX 自定义组件以及传值
  4. 【转】VS中常用图标提示含义
  5. kettle增加字段报错_【实战】使用 Kettle 工具将 mysql 数据增量导入到 MongoDB 中
  6. 程序员面试金典 - 面试题 17.16. 理发师(动态规划DP)
  7. 支配树(洛谷-P5180)
  8. springmvc 全局编码_SpringMVC请求参数和响应结果全局加密和解密
  9. 如何挖掘大数据的价值
  10. 【软件工程导论】期末复习试题集
  11. 去除图片上文字的方法(6种)
  12. Android 自动朗读TT
  13. 落幕,致我的大学生活
  14. SpringBoot+smm+Vue前后端分离项目用户模块基本功能设计
  15. eureka相同服务名注册多个不同服务
  16. C1任务01 植物大战僵尸存档修改
  17. DNS服务器未响应惊叹号,怎么办呢电脑连接网络出现感叹号?
  18. 教务(选课)管理系统
  19. 【论文基本功】【LaTeX】公式及其编号
  20. IDEA生成jar工具包

热门文章

  1. MySql数据恢复方法个人总结
  2. matlab曲线导入cad,MATLAB导入CAD数据
  3. linux下libpng库的安装以及使用
  4. zmap扫描mysql_zmap快速扫描
  5. AForge.net库类下载方式
  6. Java入门基础知识点总结(详细篇)
  7. BMP、GIF、TIFF、PNG、JPG和SVG格式图像的特点
  8. MDUI的黑暗模式实现和居中问题
  9. cmpp3.0 java 华为_CMPP3.0/2.0完成短信收发功能(引用华为smsproxy开发包)
  10. 文库下载软件 冰点文库下载器 软件 百度网盘链接地址