MySQL 优化方案
基本上通过索引来解决 。
通常索引键在where , group by , order by 相关的列
一个表只能用一个索引(查询的时候)
所以当要执行复杂查询时最好使用联合索引就是 index (a,b,c,d,....)
where 需要注意的事,
索引是左到右使用的 , 如果是 index(a,b,c) 那么可以
1. where a = x and b = y and c = z
2. where a = x order by b,c
3 where a = x group by a,b,c
group by 需要注意的事 :
如果是多表查询,group by 索引只能group 最后的那个被join出来的表的列
比如 a straight join b
那么 group by a.x 是可以的
如果是 group by a.x,b.y 那就fair 了
table join 完了最后只能有一个表索引,其它表的列的索引全部作废了
但是在join的时候他们的索引是有帮助的
order by 要注意的事
group by 之后 要order by 是很困难的,因为他们必须是用联合索引顺着走.但一般上不那么巧
而且如果你order by 有 desc 反来反去也是不会走索引的。
所以呢遇到一些没办法用索引来优化的案子只好退而求其次
group by 和 order by 都是很伤的,尤其是你join table 的话它通常还会要 using temp filesort .
所以尽可能满足其中一个也好 。
那么如果真的无法满足的话,那么要确保数据量不要太大不然就gg 了 .
那么其它的一些方向就是通过一些table 设计来尽可能的优化
比如 : 反范式
就是把多个table的数据放在一个table 让他不必join .
这样的缺点就是重复数据多坑多,admin update的时候要同步的地方也多
maintain 起来会很难 。
优点就是数据在一个table 索引就容易建了 。
预先计算
就是不要在拿数据的时候才做计算,尽可能预先算了放进去 。
那么可以减低需要 group by sum order by sum 之类的问题 .
缓存
要确保每个语句一定可以被缓存,不要使用日期的函数来写语句,比如 where a.x = now()
把语句拆开
让c#分几次查询 ,简化sql语句 .
好处是可以分散缓存,容易使用各各表的索引 。
当然要在c#做,就要厉害LINQ啦
EXPLAIN 那些事 :
using temp filesort 都是不好的,filesort是因为有sort, 而 buffer不够就会用 temp,那就更糟糕了,子查询等也会制造temp
rows 表示扫描多少行,在 innodb中是不准的!可以用 myisam 做test.
MySQL 优化方案的更多相关文章
- MySql优化方案
mysql优化方案总结 u Mysql数据库的优化技术 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索 ...
- mysql优化方案总结
u Mysql数据库的优化技术 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引u ...
- mysql优化方案之sql优化
优化目标 1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先 ...
- 数据库mysql优化方案
1.创建索引对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致.如果不加索引的话,那么查找任何哪怕只是一条特定的数据 ...
- 大佬是怎么思考设计MySQL优化方案的?
在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已. 一.优化的哲学 注:优化有风险,涉足需谨 ...
- 大牛是怎么思考设计MySQL优化方案
在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已. 1.优化的哲学 注:优化有风险,涉足需谨 ...
- MySQL优化方案二
摘自:http://www.thinkphp.cn/topic/3855.html 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需 ...
- 大牛是怎么思考设计MySQL优化方案的?
在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已. 图-MySQL查询过程 一.优化的哲学 ...
- mysql 性能优化方案
网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
随机推荐
- Android取得电池的电量
首先需要用到的是一个类继承BrocastReceiver 2 代码如下: public class Battery_Info extends BroadcastReceiver { @Override ...
- Tradesy | IT桔子
Tradesy | IT桔子 Tradesy www.tradesy.com 认领 关注 分享
- 记npm包开发全过程
概述 为什么开发npm包? 如何开发? 如何写单元测试? package.json 如何发布模块? 如何使用? 为什么开发npm模块? NPM的全称是Node Package Manager,是一个N ...
- JAVA 对象拷贝
1.java里的clone分为: A:浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. b:深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍. Java中对 ...
- node.js + express(ejs) + mongodb(mongoose) 增删改实例
MongoDB 安装步骤总结: 1.解压目录到d盘 mongodb 2.安装目录的下新建文件mongo.config文件 ##store data here dbpath=D:\mongodb\dat ...
- 基于简单sql语句的sql解析原理及在大数据中的应用
基于简单sql语句的sql解析原理及在大数据中的应用 李万鸿 老百姓呼吁打土豪分田地.共同富裕,总有一天会实现. 全面了解你所不知道的外星人和宇宙真想:http://pan.baidu.com/s/1 ...
- mybatis简单应用(基于配置文件)
本文主要介绍了如何使用mybatis进行简单的数据库操作.本人使用的是mybatis3.05. 1.创建数据库表(User表) CREATETABLE `NewTable` (`userId` big ...
- mysql报错"ERROR 1206 (HY000): The total number of locks exceeds the lock table size"的解决方法
1. 问题背景 InnoDB是新版MySQL(v5.5及以后)默认的存储引擎,之前版本的默认引擎为MyISAM,因此,低于5.5版本的mysql配置文件.my.cnf中,关于InnoD ...
- FoxOne---一个快速高效的BS框架--(4)
FoxOne---一个快速高效的BS框架--(1) FoxOne---一个快速高效的BS框架--(2) FoxOne---一个快速高效的BS框架--(3) FoxOne---一个快速高效的BS框架-- ...
- Linux文件的查找
一直以来,总是记不住文件的查找命令,今天记在博客里,希望可以记得更牢! 1.脚本文件名的查询 which命令(寻找执行文件) #which ifconfig 2.文件名的查找 whereis 命令 # ...