1、建立基础索引:在where,order,join字段上建立索引
优化,组合索引:基于业务逻辑
前缀索引使用上与普通索引一致!

2、索引的存储结构:Btree索引,hash索引,聚簇索引
Btree不是二叉树
在MySQL中,仅仅只有InnoDB的主键索引是聚簇结构,其他的都是典型的BTree结构
Hash索引就是key-value,就是PHP中的关联数组,索引被载入到内存时

3、queryCache,当数据表结构改动,缓存失效,动态数据不能被缓存
show variables like 'query_cache_type'
show variables like 'query_cache_size'
set global query_cache_size=102760448;
select sql_cache * from student where user like '%fyw'

4、分区,partition
一个表的数据和索引存储在不同文件中
//利用id字段,使用hash算法,将数据分布到10个分区内
partition by hash(id) partitions 10

5、算法

(1)hash算法:(均匀分配)
分区算法,在业务逻辑层面,表示均匀分配。
(2)key算法:(均匀分配)
partition by key(subject) partitions 10
分区必须是主键的一部分,分区字段一定是强检索字段。
(3)range算法:(条件分配)
partition by range(pubtime){
partition p201710 values less than (1509465599),
partition p201711 values less than (1512057599)
}
条件必须是< less than运算符
(4)list算法:(条件分配)
也是一种条件分区,列表值分区
partition by list(status){
partition pdone values in (1,2),
partition pdod values in (3)
}
业务逻辑有明显差异的时候选择条件分配,无明显差异则选择均匀分配
list,range可以删除或新增分区
alter table table-name add partition{
partition p201710 values less than (1509465599),
partition p201711 values less than (1512057599)
}
hash,key可以修改分区数量
alter table table-name add partitions 4;
alter table table-name coalesce partition 6;

只有检索字段是分区字段的时候,分区效率才会比较明显

6、分区的原因:
数据库减压
分区的算法局限(重要原因)

分区和分表都是属于水平化划分
垂直分割:每个表的记录数量是一致的,但字段不一致

7、读写分离,负载均衡
需要用到的技术,MySQL复制技术,负载均衡中间件
读写分离:
有一些MySQL服务器提供读操作,select
另一些MySQL服务器提供写操作,insert,update,delete
母的,分散压力,读服务器不会被阻塞
所有PHP的框架都支持读写分离的配置
写为主服务器,其余为读服务器

6、开启索引和约束,一次性创建索引
alter table table-name disabled keys
alter table table-name enable keys

7、MySQL主要采用一写多读架构,读操作大大多于写操作,还有就是写操作同步问题
一写多读中,读服务器就需要负载均衡工作
典型负载算法:
轮询:轮着来
加权轮询:依据能力,轮着来
负载分配:依据空闲状态

8、横向扩展Mysql服务器;读写分离、主从复制、负载均衡(高性能)
9、高可用:需要保证24小时不停机 在服务器架构时,所有单点服务器都需要配置冗余服务器,心跳检测

10、大页码,limit offset
尽量保证不用出现大的offset,在使用limit时。
11、select * 少用
单表查询代替多表查询
原因是:
多表查询的执行,join,子查询,也是一个表的去执行,执行完再去合并结果。
计算分布,单表查询,计算压力在应用程序端,多表查询,计算压力在数据库上。
多表查询,会增加表锁定时间,降低程序并发性能。
单表查询,增加了程序复杂度。使用ORM模型,模型已经做了大量的工作完成单表处理。
12、count(1)和count(*)类似,统计记录数量

13、mysqlslap压力测试工具
CMD上直接运行:mysqlslap
并发测试:mysqlslap --auto-generate-sql --concurrency=250 --iterations=10 --engine=innodb -uroot -phellokang

14、全文索引:关键字不是字段本身,而是从字段中提取的关键词,作为关键字
PHP典型的全文索引工具:Coreseek ,XunSearch,Solr都是典型的全文索引工具

转载于:https://www.cnblogs.com/Min-Na/p/11095456.html

MySQL优化(二)相关推荐

  1. mysql to days 索引_高性能mysql优化二之索引篇

    前言 为什么要使用索引?索引有什么用途呢?我的亲身经历,一个几千万数据的项目,我写了一条查询,没有用到索引,由于访问量比较大,瞬间网站就跪了,从此以后我写的每一条sql都会explain解析看是否用到 ...

  2. MySQL优化系列(二)--查找优化(1)(非索引设计)

    MySQL优化系列(二)--查找优化(1)(非索引设计) 接下来这篇是查询优化,用户80%的操作基本都在查询,我们有什么理由不去优化他呢??所以这篇博客将会讲解大量的查询优化(索引以及库表结构优化等高 ...

  3. MySQL优化(二):索引的类型、匹配原则、创建原则

    目录 索引的优缺点 索引类型 聚簇索引(主键索引) 非聚簇索引(二级索引.辅助索引) 索引匹配的原则 最左匹配原则 无法使用索引的场景 索引创建的原则 使不使用索引的依据到底是什么? 参考 索引的优缺 ...

  4. zabbix mysql优化 my.cnf_zabbix数据库优化之数据库优化(二)

    zabbix数据库优化之数据库优化二 简介 数据库history设置是保存7天.然后如果你没有分区.虽然数据在减少但是表空间不会减少.浪费硬盘空间的同事缓存内的cache部分也没有被释放.分区后可以迁 ...

  5. MySQL(二):MySQL性能优化

    [目录] MySQL(一):MySQL中的事务 MySQL(二):MySQL性能优化 [前言] 在对MySQL的事务进行了学习总结之后,继续对MySQL的性能优化进行学习并进行总结,将自己在工作中的性 ...

  6. 第十二章 MySQL优化

    1. 优化哲学 1.1 为什么优化? 为了获得成就感? 为了证实比系统设计者更懂数据库? 为了从优化成果来证实优化者更有价值? 但通常事实证实的结果往往会和您期待相反! 优化有风险,涉足需谨慎! 1. ...

  7. Mysql 优化(学习笔记二十)

    https://blog.csdn.net/steven_liwen/article/details/53188411 运维角度mysql优化:https://www.cnblogs.com/shen ...

  8. MySQL优化配置之query_cache_size

    原理 MySQL查询缓存保存查询返回的完整结果.当查询命中该缓存,会立刻返回结果,跳过了解析,优化和执行阶段.  查询缓存会跟踪查询中涉及的每个表,如果这写表发生变化,那么和这个表相关的所有缓存都将失 ...

  9. 4 个 MySQL 优化工具 AWR,帮你准确定位数据库瓶颈!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:今日头条,作者:老王谈运维 www.toutiao.com/ ...

  10. 项目中常用的19条MySQL优化

    声明一下:下面的优化方案都是基于 " Mysql-索引-BTree类型 " 的 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单 ...

最新文章

  1. 基于SSH框架实际开发时遇到的问题及解决办法
  2. 绩效考核如何才能突破上司的主观偏见局限?
  3. 从Ruby调用Shell命令
  4. 在不同制作基础上该如何选择网页制作软件?
  5. what is love?
  6. BugKuCTF 杂项 隐写
  7. Matplot的常见问题
  8. Visual Studio 快捷键使用方法
  9. springcloud架构特点_打造企业级微服务平台架构,分布式应用场景管理
  10. c语言做一个小程序报告,《C语言程序设计实践》课程报告30个小程序组合成一个大程序.doc...
  11. python import sql脚本_13-模块介绍-import两种方式-py文件的两种用途-模块搜索路径-项目开发的目录规范...
  12. python3.6.5安装pip_无法在Python3.6中pip安装pickle
  13. python webdriver 登录163邮箱发邮件加附件, 外加数据和程序分离,配置文件的方式...
  14. iOS 算法的前世今生:算法原理、常用算法(一)排序算法
  15. MFC开发上位机经验
  16. VB.NET连接SQL数据库
  17. 机器人末端执行器气爪怎么吸合_工业机器人带动末端执行器市场发展
  18. R语言制作长三角城市群空间权重矩阵及作图显示
  19. android 如何把.swf作为开机动画,win10系统将PPT幻灯片转为SWF动画的操作方法
  20. SPI转can芯片CSM300详解以及Linux驱动移植调试笔记

热门文章

  1. jQuery实现倒计时重新发送短信验证码功能示例
  2. Linq实战 之 Linq to Sql及Entity Framework操作详解
  3. mouseover与mouseenter、 mouseout与mouseleave的区别
  4. 我国三大常用坐标系区别(北京54、西安80和WGS-84)
  5. (论坛答疑点滴)怎么给Table动态添加控件并且得到控件的值?
  6. python-extend用法
  7. 2020-2021年NLP有什么核心技术的更迭吗?或者有什么推动领域发展的paper吗?
  8. 【AAAI 2020】微软亚洲研究院6篇精选论文在家必看!
  9. 【文本分类】几个可作为Baseline的模型
  10. 干货 | 一文掌握常用的机器学习模型