知识点10-MySQL、Redis

1. B+ Tree

见知识点1

drop, truncate, delete :
当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.

2. 索引以及优化

对MySQL应用进行性能优化

[MySQL权威指南]
主要考虑五个问题:

  1. 应用优化
    • 标准化数据库:消除数据库的冗余
    • 适当的非标准化数据库:每晚对基本信息作总结报告
    • 编码时避免多余的开销:如同一个的查询使用一次select而不是for循环里多次select
    • 适当地缓存数据:如缓存各省的名字
    • 尽可能地使用永久连接或者连接池
  2. SQL查询优化
    • 尽量为所有在WHERE子句中被引用的列建立索引
    • 尽可能使用唯一索引:列数据是唯一的,如主键或者其他键,唯一索引比普通索引性能更高。
    • 利用多列索引:设计良好的多列索引可以减少所需索引的总数量。
    • 考虑不为某些列建立索引:当列的数据是平均分布的时候。如性别的男、女,通过性别选择需要读取大概一半的行,在这种情况子下全表浏览更快。
    EXPLAIN SELECT命令:性能优化工具,可以指出:查询如何使用(不使用)索引、表被连接的顺序。
  3. 数据库服务器优化
    Table_cache:控制MySQL表高速缓存的大小。增加这个参数可使MySQL拥有更多可同时打开的表,二无需打开和关闭文件。
    Key_buffer_size:控制保存索引的缓冲区大小。
  4. 操作系统/硬件优化

3. 查询优化

优化数据访问

  1. 减少请求的数据量
  • 只返回必要的列:最好不要使用 SELECT * 语句。
  • 只返回必要的行:使用 LIMIT 语句来限制返回的数据。
  • 缓存重复查询的数据:使用缓存可以避免在数据库中进行查询,特别在要查询的数据经常被重复查询时,缓存带来的查询性能提升将会是非常明显的。
  1. 减少服务器端扫描的行数
    最有效的方式是使用索引来覆盖查询。

4. InnoDB与MySLAM

InnoDB是MySQL默认的搜索引擎。
对比:

事务:InnoDB 是事务型的,可以使用 Commit 和 Rollback 语句。
并发:MyISAM 只支持表级锁,而 InnoDB 还支持行级锁。
外键:InnoDB 支持外键。
备份:InnoDB 支持在线热备份。
崩溃恢复:MyISAM 崩溃后发生损坏的概率比 InnoDB 高很多,而且恢复的速度也更慢。
其它特性:MyISAM 支持压缩表和空间数据索引。

5. Redis使用场景

1. 概述

Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存储键和五种不同类型的值之间的映射。
键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。
Redis 支持很多特性,例如将内存中的数据持久化到硬盘中,使用复制来扩展读性能,使用分片来扩展写性能。

2. 使用场景
  1. 计数器
    可以对 String 进行自增自减运算,从而实现计数器功能。
    Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。
  2. 缓存
    将热点数据放到内存中,设置内存的最大使用量以及淘汰策略来保证缓存的命中率。
  3. 查找表
    例如 DNS 记录就很适合使用 Redis 进行存储。
    查找表和缓存类似,也是利用了 Redis 快速的查找特性。但是查找表的内容不能失效,而缓存的内容可以失效,因为缓存不作为可靠的数据来源。
  4. 消息队列
    List 是一个双向链表,可以通过 lpush 和 rpop 写入和读取消息
    不过最好使用 Kafka、RabbitMQ 等消息中间件。
  5. 会话缓存
    可以使用 Redis 来统一存储多台应用服务器的会话信息。
    当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。
  6. 分布式锁实现
    在分布式场景下,无法使用单机环境下的锁来对多个节点上的进程进行同步。
    可以使用 Redis 自带的 SETNX 命令实现分布式锁,除此之外,还可以使用官方提供的 RedLock 分布式锁实现。
  7. 其它
    Set 可以实现交集、并集等操作,从而实现共同好友等功能。
    ZSet 可以实现有序性操作,从而实现排行榜等功能。

6. Redis与Memchached

两者都是非关系型内存键值数据库,主要有以下不同:

  1. 数据类型
    Memcached 仅支持字符串类型,而 Redis 支持五种不同的数据类型,可以更灵活地解决问题。

  2. 数据持久化
    Redis 支持两种持久化策略:RDB 快照和 AOF 日志,而 Memcached 不支持持久化。

  3. 分布式
    Memcached 不支持分布式,只能通过在客户端使用一致性哈希来实现分布式存储,这种方式在存储和查询时都需要先在客户端计算一次数据所在的节点。
    Redis Cluster 实现了分布式的支持。

  4. 内存管理机制

  • 在 Redis 中,并不是所有数据都一直存储在内存中,可以将一些很久没用的 value 交换到磁盘,而 Memcached 的数据则会一直在内存中。

  • Memcached 将内存分割成特定长度的块来存储数据,以完全解决内存碎片的问题。但是这种方式会使得内存的利用率不高,例如块的大小为 128 bytes,只存储 100 bytes 的数据,那么剩下的 28 bytes 就浪费掉了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容

  • 这篇文章主要涉及到MySQL的知识点: 索引(包括分类及优化方式,失效条件,底层结构) sql语法(join,un...
    一根薯条阅读 2,707评论 0 8
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 2,901评论 0 8
  • MySQL不权威总结 欢迎阅读 本文并非事无巨细的mysql学习资料,而是选择其中重要、困难、易错的部分进行系统地...
    liufxlucky365阅读 2,588评论 0 26
  • 系统层面(基本不用动,看了下,买的云服务器基本都已经优化过了) 内核相关参数(/etc/sysctl.conf) ...
    神奇大叶子阅读 2,001评论 0 4
  • 2019.6.6 星期四 天气:晴(大风) 教育的本质是:一棵树摇动另一棵树,一朵云推动另一朵云,一...
    小土妞爱学习阅读 229评论 0 0