Mysql

MySQL数据库优化总结

对于一个以数据为中心的应用,数据库的好坏直接影响到程序的性能,因此数据库性能至关重要。一般来说,要保证数据库的效率,要做好以下四个方面的工作:数据库设计、sql语句优化、数据库参数配置、恰当的硬件资源和操作系统,这个顺序也表现了这四个工作对性能影响的大小。下面我们逐个阐明:…

    

MySQL数据库性能优化之硬件瓶颈分析

在过往与很多人的交流过程中发现,在谈到基于硬件来进行数据库性能瓶颈分析的时候,常被大家误解为简单的使用更为强劲的主机或者存储来替换现有的设备。

个人觉得这其中可能存在一个非常大的误区。我们在谈论基于硬件进行优化的时候,不能仅仅将数据库使用的硬件划分为主机和存储两部分,而是需要进一步对硬件进行更细的分解,至少也应该分解到如下范畴:

主机…

    

MySQL数据库性能优化之缓存参数优化

【IT168 技术】在平时被问及最多的问题就是关于MySQL数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级MySQL DBA 以及其他对MySQL性能优化感兴趣的朋友们有所帮助。

这是MySQL数据库性能优化专题 系列的第一篇文章:MySQL 数据库性能优化之缓存参数优化

数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作。而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级。所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO。本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化:…

    

MySQL数据库性能优化之存储引擎选择

【IT168 技术】MySQL 的存储引擎可能是所有关系型数据库产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系。

由于各存储引擎功能特性差异较大,这篇文章主要是介绍如何来选择合适的存储引擎来应对不同的业务场景。

系列的第五篇文章:MySQL数据库性能优化之存储引擎选择
系列的第四篇文章:MySQL 数据库性能优化之SQL优化
系列的第三篇文章:MySQL 数据库性能优化之索引优化
系列的第二篇文章:MySQL 数据库性能优化之表结构优化
系列的第一篇文章:MySQL 数据库性能优化之缓存参数优化

        

MySQL 数据库性能优化之表结构优化

【IT168 技术】很多人都将 数据库设计范式 作为数据库表结构设计“圣经”,认为只要按照这个范式需求设计,就能让设计出来的表结构足够优化,既能保证性能优异同时还能满足扩展性要求。殊不知,在N年前被奉为“圣经”的数据库设计3范式早就已经不完全适用了。这里我整理了一些比较常见的数据库表结构设计方面的优化技巧,希望对大家有用。

由于MySQL数据库是基于行(Row)存储的数据库,而数据库操作 IO 的时候是以 page(block)的方式,也就是说,如果我们每条记录所占用的空间量减小,就会使每个page中可存放的数据行数增大,那么每次 IO 可访问的行数也就增多了。反过来说,处理相同行数的数据,需要访问的 page 就会减少,也就是 IO 操作次数降低,直接提升性能。此外,由于我们的内存是有限的,增加每个page中存放的数据行数,就等于增加每个内存块的缓存数据量,同时还会提升内存换中数据命中的几率,也就是缓存命中率。…

    

MySQL数据库性能优化之SQL优化

【IT168 技术】有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧。

相关阅读:

MySQL 数据库性能优化之表结构优化

MySQL数据库性能优化之缓存参数优化

MySQL数据库性能优化之索引优化

注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础。

优化目标

    

MySQL 三种关联查询的方式: ON vs USING vs 传统风格

看看下面三个关联查询的 SQL 语句有何区别?

SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id)

SELECT * FROM film JOIN film_actor USING (film_id)

SELECT * FROM film, film_actor WHERE film.film_id = film_actor.film_id

最大的不同更多是语法糖,但有一些有意思的东西值得关注。

为了方便区别,我们将前两种写法称作是 ANSI 风格,第三种称为 Theta 风格。

Theta 风格

在 FROM …

MySQL 如何优化 ORDER BY

在某些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序。

尽管 ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的 ORDER BY 字段在 WHERE 子句中都被包括了。

 

下列的几个查询都会使用索引来解决 ORDER BY 或 GROUP BY 部分:…

    

MySQL全文检索中不进行全文索引默认过滤词表(ft_stopword_file =>ft_precompiled_stopwords)

MySQL支持全文索引和全文检索功能。 (详细的MySQL全文检索的介绍请见官方手册

对于全文索引,MySQL会从 ft_stopword_file 变量指定的文件中读取不进行全文索引的过滤词表, 一行一个。若将该变量设置为空字符串(”)则禁用过滤词表。

此变量默认为built-in,即MySQL使用自建默认过滤词表,查看MySQL4到MySQL6的源码,不同版本的默认词表是一样的,共545个,详细如下:…