sql优化原则
尽量使用性能高的比如left join等,尽量减少数据查询的column,尽量不要查询冗余数据,like的话“%%”是没有 办法使用索引的,但是“%”是可以使用索引的
having以前一直不知道到底真正的用途是什么,觉得跟where这不是一样的吗,现在区分开来了
因为where是对结果集的筛选,若分组之后就没法使用where了,
所以having应运而生,having就是对分组后的数据进行筛选的,搭配group by 放在其之后,如果有order by 则也放在order by之后
mysql数据库的引擎有8种,

一般常用的有3中,innodb,这种是事务性的,所以一些安全性的sql,使用它,这样可保证数据的一致性
myiasm,这种是可以建立全文索引的,所以如果要对全文进行全文索引查询,那么可以在简历数据库的时候使用这个,但是虽然是索引,但是要注意,字符越少,它的索引越有可能无法创建,必须是有连接性,有规律的,这样索引的命中率才大
memory,这种索引就类似于memcache这种了,就是一个缓存,很快,但是一旦挂掉,那么数据库就丢失了。
索引的建立是要消耗空间的,在mysql中如果对一个键建立索引,那么会产生myf还是什么文件的了,挺大的
暂时就记得这么多了,还有好几个知识点不太记得了,记起来再写
二、mysql的视图并不是临时表,而是真正的数据,对视图中的数据进行操作,数据表中的数据也会改变,可定义为是否可更新
视图有很多优点,主要表现在:
•视点集中
•简化操作
•定制数据
•合并分割数据
•安全性
视图也存在一些缺点:
最大的缺点就是视图带来的更新负担,比如源数据改了,那么视图中要做相应更新,视图中数据改了源数据也要做同步
三、自定义函数的使用


由于sql分组有问题,
导致查询出来的虽然数据没有问题,但是牵扯到游标,所以count计算的数量是它实际数据条数的倍数,
所以跟之前修改之后修改写的关于分组表的sql在性能分析上可能之前的sql占优,但是
由于分组的问题,导致游标下移查询倍数,虽然是temp的但是游标还是要走的,游标也是为什么查询速率快的原因
PS:这里要十分注意,有可能的是,直接使用mysql是没有问题的,但是有可能使用工具,比如说mysql的图形化工具跟
jdbc或者是是别的orm框架什么的可能就会有这样的问题,游标的问题
摘录:
本文从游标的基本概念,到生命周期来谈游标。游标是非常邪恶的一种存在,使用游标经常会比使用面向集合的方法慢2-3倍,当游标定义在大数据量时,这个比例还会增加。如果可能,尽量使用while,子查询,临时表,函数,表变量等来替代游标,记住,游标永远只是你最后无奈之下的选择,而不是首选。
游标是邪恶的!
sql优化原则的更多相关文章
- 我的mysql数据库sql优化原则
原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...
- (转)SQL 优化原则
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...
- Oracle SQL 优化原则(实用篇)
由于SQL优化优化起来比较复杂,并且还受环境限制,在开发过程中,写SQL必须遵循以下几点原则: 1.Oracle 采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他Where ...
- SQL 优化原则
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...
- SQL优化原则(转)
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...
- Oracle SQL优化原则
原文:http://bbs.landingbj.com/t-0-240353-1.html 1.选用适合的 ORACLE 优化器 2.访问 Table 的方式 3.共享SQL语句 共享的语句必须满足三 ...
- sql优化原则与技巧
加快sql查询是非常重要的技巧,简单来说加快sql查询的方式有以下几种:一.索引的引用 1.索引一般可以加速数据的检索速度,加速表与表之间的链接,提高性能,所以在对海量数据进行处理时,考虑到信息量比较 ...
- 一些sql优化原则
1.我们在设计表的时候,尽量让字段拥有默认值,尽量不要让字段的值为null. 因为,在 where 子句中对字段进行 null 值判断(is null或is not null)将导致引擎放弃使用索引而 ...
- oracle优化原则(二)
SQL优化原则 二.SQL语句编写注意问题 www.2cto.com 下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍.在这些where子句中,即使某些列存在索引,但是由于编写了劣质 ...
随机推荐
- 安装Genymotion与集成eclipse,最后有集成android studio
本安装过程从不用到VPN 一切国内网络都可以解决. 首先下载Genymotion,网址 https://www.genymotion.com/account/login/ 首先需要注册,我使用163 ...
- #if和#ifdef区别
#if 是要去判断, 跟值有关 #ifdef 只要定义了即可, 就会走下面的代码, 不管值是0还是1 所以一般都是用#ifdef DEBUG调试
- 数据库索引的实现原理(笔记)详细http://www.linezing.com/blog/?p=798#nav-1
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询.更新数据库表中数据.索引的实现通常使用B树及其变种B+树. 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某 ...
- CodeForces 707D Persistent Bookcase
$dfs$,优化. $return$操作说明该操作完成之后的状态和经过操作$k$之后的状态是一样的.因此我们可以建树,然后从根节点开始$dfs$一次(回溯的时候复原一下状态)就可以算出所有状态的答案. ...
- Java的“影子克隆”和“深度克隆”
今天来学习学习java对象的克隆,在写代码的时候,有时候我们会这样写:对象1=对象2,也就是把对象2赋值给对象1了,但是这样做有个问题,就是如果我们修改了对象2的属性值,对象1的相同属性值也被修改了, ...
- C#+ArcEngine中com对象的释放问题
1.问题描述 最近在写C#下AE的开发,在循环获取数据并修改时碰到了两个问题"超出系统资源"和"超出打开游标最大数":在网上看了一些资料,发现都是说在循环中没有 ...
- MySQL字段联合去重sql
MySQL字段联合去重sql 例如数据 id,name1,name2 1 a x 2 a y 3 b x 4 a y 5 a x 联合去重name1,name2的结果为 id,name1,name2 ...
- jquery正则常用的
jQuery.validator.addMethod("mobilePhone",function(value,element){ return this.optional(ele ...
- linux下安装LoadRunner LoadGenerator
root用户登录 关闭防火墙: setenforce 0 /etc/init.d/iptables stop 先安装一个rpm包,compat-libstdc++-33-3.2.3-61.i386.r ...
- [Rails] 设计模式 MVC
使用 MVC 的Web开发框架有很多,比如 PHP 的 Zend,Python 的 Django 和 Golang 的 Beego.这篇文章主要介绍一下 MVC 的基本概念. 何为MVC 为了明确一个 ...