1)谨慎而有效地使用索引

选择合理的索引(前缀性及可选性)、删除没有用的索引。

2)使用规范化,但不要使用过头

规范化(至少是第三范式)是一个易于理解且标准的方法。然而,在有些情况下,你可能希望违反这些规则。查询表通常是规范化的产物,也就是说,你创建了一个特殊的表,这个表包含了在其他表中被频繁使用的相关信息的列表。然而,当使用那些经常被访问且分布有限(仅有或有限的行数拥有小值)的查找表时,会使系统性能降低。在这种情况下,每次你使用查询信息,它们必须使用join以获取完整数据。join的开销很大,而且频繁访问会使开销随着时间逐渐增加。为了减少这种潜在的性能问题,可以使用枚举字段存储数据,而不是使用查找表存储数据。例如,可以使用枚举字段存储头发彩色值,而不是创建表来存储头发颜色值,这样还可以避免使用join.

3)使用正确的存储引擎

mysql的最强大的功能之一是它支持不同的存储引擎,存储引擎管理如何存储和恢复数据。mysql支持多个存储引擎,每个存储引擎具有独特的功能和用途,可以使数据库设计通过使用最合适他们的应用程序的存储引擎来改善数据库系统的性能。例如,如果有一个这样的环境:使用事务控制高度活跃的数据库,请选择一个合适这个情况的存储引擎(mysql的有些存储引擎不支持事务),你还可能会发现这样的视图和表,它们常常被查询但是几乎不被更新(例如查找表),在这种情况下,你可能希望使用存储引擎将这些数据存储在内存中,以便快速访问它们。

InnoDB存储引擎支持事务,在需要事务支持时,通常应该选择这个存储引擎,它是Mysql中目前唯一事务性的引擎。很多第三方存储引擎支持事务,但是仅有InnoDB有”开包即用”选项。有趣的是,InnoDB中所有的索引都是B-trees,在这个B树中索引记录被存储在树的叶子项,InnoDB适用于高性能和事务处理环境。

MyISAM存储引擎是Mysql默认引擎,如果你在create语句中省略了engine选项,那么默认使用这个引擎。MyISAM经常在数据仓库、电子商务和企业应用中使用。MyISAM使用高级缓存和索引机制提高数据检索速度,另外,当各种应用程序需要快速检索数据而不需要事务时,MyISAM将是很好的选择。

Blackhole存储引擎是非常有趣的,它并不存储任何东西。实际上,正如它的名字所言-存储进去的数据永远还会返回。Blackhole存储引擎有个特殊的用途,如果启用了二进制日志,SQL命令将被写入这个日志,这时,Blackhole存储引擎被当做复制拓扑中的中继代理使用。

Memory存储引擎(有时被称为HEAP)是内存中的存储器,它使用哈希机制频繁检索被使用过的数据,这样可以更快地检索,它访问数据的方式与其他存储引擎类似,但是数据存储在内存中,并且只在mysql会话有效。当关机时,这些数据被刷新并删除掉。Memory存储引擎通常用于以下情况:静态数据被频繁使用且很少被改变(如查找表).

4)通过Query Cache使用视图来加速结果

5)使用约束

6)使用explain、analyze、optimize

这些工具在诊断和调优时很重要,在不发生错误的前提下经常使用它们,但是请小心使用。具体来说,当analyze、optimize有意义且不是作为定期的预定的事件时使用它们。我们发现有些系统管理员晚上使用这些命令,但是一般情况下,这样做是不值得的,并且会产生不必要的表副本。显然,强制系统定期复制数据浪费时间,并会导致操作过程中的访问有限。

Mysql学习总结(20)——MySQL数据库优化的最佳实践的更多相关文章

  1. Mysql学习笔记整理之数据库优化

    数据库性能瓶颈的原因 数据库连接数 数据量大 硬件资源限制 数据性能优化方案 sql优化       2.缓存        3.建好索引    4.读写分离        5. 分库分表 慢日志查  ...

  2. 单机数据库优化的一些实践(mysql)

    数据库优化有很多可以讲,按照支撑的数据量来分可以分为两个阶段:单机数据库和分库分表,前者一般可以支撑500W或者10G以内的数据,超过这个值则需要考虑分库分表.另外,一般大企业面试往往会从单机数据库问 ...

  3. 京东云TiDB SQL优化的最佳实践

    京东云TiDB SQL层的背景介绍 从总体上概括 TiDB 和 MySQL 兼容策略,如下表: SQL层的架构 用户的 SQL 请求会直接或者通过 Load Balancer 发送到 京东云TiDB ...

  4. XPages访问关系型数据库技术与最佳实践

    XPage 对于 Domino 开发人员的一大好处就是能够很方便和高效的访问关系型数据库.本文通过实例代码展现了在 XPage 中访问关系型数据库的具体步骤 , 同时讲解了一些在 XPage 中高效访 ...

  5. 如何让HTTPS站点评级达到A+? 还得看这篇HTTPS安全优化配置最佳实践指南

    0x00 前言简述 SSL/TLS 简单说明 描述: 当下越来越多的网站管理员为企业站点或自己的站点进行了SSL/TLS配置, SSL/TLS 是一种简单易懂的技术,它很容易部署及运行,但要对其进行安 ...

  6. MySQL学习笔记十四:优化(1)

    SQL优化 1.查看各种SQL执行的频率 mysql> show status like 'Com_select';--Com_insert,Com_delete,connections(试图连 ...

  7. MySQL 性能优化 30个数据库设计的最佳实践

    数据库设计是整个程序的重点之一,为了支持相关程序运行,最佳的数据库设计往往不可能一蹴而就,只能反复探寻并逐步求精,这是一个复杂的过程,也是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程. ...

  8. 吴裕雄--天生自然MySQL学习笔记:MySQL 创建数据库

    在登陆 MySQL 服务后,使用 create 命令创建数据库,语法如下: CREATE DATABASE 数据库名; 以下命令简单的演示了创建数据库的过程,数据名为 RUNOOB: [root@ho ...

  9. mysql学习3:mysql之my.cnf详解

    mysql之my.cnf详解 本文转自:https://www.cnblogs.com/panwenbin-logs/p/8360703.html 以下是 my.cnf 配置文件参数解释: #*** ...

随机推荐

  1. 【codeforces 452D】Washer, Dryer, Folder

    [题目链接]:http://codeforces.com/problemset/problem/452/D [题意] 洗衣服有3个步骤,洗,干,叠; 有对应的3种洗衣机,分别有n1,n2,n3台,然后 ...

  2. 数字签名技术与https

    1,非对称加密技术 非对称加密算法需要两个密钥,公开密钥(publickey)和私有密钥(privatekey):公钥和私钥是成对出现的. 非对称加密例子:B想把一段信息传给A,步骤:1)A把公钥传给 ...

  3. HDU 1131

    N个节点的不同的树的数目.这样 随便取一个节点作为根,那么他左边和右边的儿子节点个数就确定了,假定根节点标号为x,那么左子树的标号就从1到x-1,共x-1个,右子树的标号就从x+1到n,共n-x个,那 ...

  4. [Hyperapp] Render Text with JSX in Hyperapp

    Hyperapp is an ultra lightweight (1kb), minimal, functional, JavaScript library for building UIs. It ...

  5. linux下使用DBCA(database configuration assistant)创建oracle数据库

    前提:切换到图形界面 到Oracle的bin文件夹下,使用oracle用户.运行dbca就可以.和windows的效果一样. 假设出现乱码 export LANG="en_US:UTF-8& ...

  6. 【BZOJ3270】博物馆 概率DP 高斯消元

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  7. Hibernate中的HQL

    一.查询所有的时候 List<Company> list=session.createQuery("from Company as c order by c.cid desc&q ...

  8. iOS对象方法和类方法的区别与调用方式

    作为一个iOS程序员初学者,会搞不清楚对象方法和类方法的区别 -(void)duixiangfangfa ; +(void)leifangfa; - 代表实例方法,它在类的一个具体实例范围内执行,也就 ...

  9. mount ntfs 失败解决办法

    在双系统中,ntfs可能会应为windows的缓存而挂载失败.可用下面命令修复. Use ntfsfix in the terminal, even if you can't access Windo ...

  10. luogu 2679 子串

    子串 史上最简短的一篇博客,毕竟看题解ac心疼我的kmp /* f[i][j][k][0/1]表示A的前i个,B的前j个,用到了k个子串,当前字符选或者不选. 所以f[0][0][0][0]的方案数为 ...