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相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
随机推荐
- CF-599B - Spongebob and Joke
B. Spongebob and Joke time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- v4l2采集视频和图片源码
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h&g ...
- GF(2^8)生成元
目的是找出所有GF(2^8)的生成元. 方法很简单,从2开始遍历,将每个元素都与自身相乘255次,看是否能得到1~255.若能,则是生成元. #include<iostream> #inc ...
- python unicodeDecode error
混淆了 python2 里边的 str 和 unicode 数据类型. 0. 你需要的是让编码用实际编码而不是 ascii 1. 对需要 str->unicode 的代码,可以在前边写上 imp ...
- V$、GV$、X$、V_$、GV_$之间的关系
V$.GV$.X$.V_$.GV_$之间的关系 GV$:全局视图,针对多个实例环境. V$:针对某个实例的视图. X$:是GV$视图的数据来源,oracle内部表. GV_$:是GV$的同义词. V_ ...
- 详解Java反射各种应用
Java除了给我们提供在编译期得到类的各种信息之外,还通过反射让我们可以在运行期间得到类的各种信息.通过反射获取类的信息,得到类的信息之后,就可以获取以下相关内容: Class对象 构造器 变量 方法 ...
- struts2.1.3之后使用自定义Filter
struts2中 ActionContextCleanUp, StrutsPrepareAndExecuteFilter, StrutsPrepareFilter,StrutsExecuteFilte ...
- 基本SQL语句练习之SELECT
一.SQL Plus连接sqlplus:以命令行方式连接数据库sqlplusw:以窗口登录方式连接数据库conn sys/password as sysdba;show userselect * fr ...
- hdu 1301
最小生成树模板题 简单的prim算法 AC代码: #include <iostream> #include <stdio.h> #define INF 9999999 usin ...
- FineUI添加隐藏标题
添加隐藏标题 窗体前台: <x:Button ID="btnShowHideHeader" runat="server" Icon="Secti ...