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个,详细如下:…

mysql 去除重复 Select中DISTINCT关键字的用法

在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,我只有用二重循环查询来解决,而 这样对于一个数据量非常大的站来说,无疑是会直接影响到效率的。所以我花了很多时间来研究这个问题,网上也查不到解决方案,期间把容容拉来帮忙,结果是我 们两人都郁闷了。。。。。。。。。…

MySql的优化步骤

MySql优化的一般步骤:

1.通过show status 命令了解各种sql的执行效率

SHOW STATUS提供msyql服务器的状态信息

一般情况下,我们只需要了解以”Com”开头的指令

show session status like ‘Com%’:显示当前的连接的统计结果

show global status like ‘Com%’ :显示自数据库上次启动至今的统计结果

注:默认是session级别的…