当前位置: 代码迷 >> 高性能数据库开发 >> 高效的sql语句,该怎么解决
  详细解决方案

高效的sql语句,该怎么解决

热度:127   发布时间:2016-05-11 10:05:03.0
高效的sql语句
小弟初来乍到做web开发,最近学习sql,如何能编写高效的sql呢,大侠们有什么好书推荐下呢……
------解决方案--------------------
找本语法书,一个分析器,把各种你能想到的写法不停测试。
lecco sql export,这个自动工具有些帮助。
------解决方案--------------------
少用!=(<>),尽量用=,尽量不要desc,尽量少用嵌套查询,表的设计尽量合理,尽量少用多表级联,尽量使用索引,尽量使用视图.................
------解决方案--------------------
有时候嵌套查询的效率还是挺高的,至少比多表连要高。多表连接在很大数据量的时候会使性能急剧下降,这时候可以有嵌套查询来优化。具体还要自己多多总结。举一个例子
实体表:student(id,name) teacher(id,name)
联系表:s_t(sid,tid)
考虑下面的查询
select s.name
from student s,s_t
where s.id=s_t.sid and s_t.tid=1
如果改为
select s.name
from student s
where s.id in(select sid from s_t where s_t.tid=1)
情况会如何呢?
第一种查询先把两个表进行笛卡儿积,这时要进行处理的数据量会增加一个数量级,如果存在大量数据,性能就会急剧下降。
第二种查询先搜索一个表(s_t),得到的结果是一个小批量的数据(无论原数据量有多大),再用student表的每一个元组遍历这个小批量数据集,性能大大得到提升。
------解决方案--------------------
有注意性能的书,下本来看。比如where后怎样放条件,哪些语句费时...
------解决方案--------------------
打好基础,自己慢慢体会总结!

可以把自己的认为复杂SQL语句放到csdn上来,给别人看看!
------解决方案--------------------
有时候嵌套查询的效率还是挺高的,至少比多表连要高。多表连接在很大数据量的时候会使性能急剧下降,这时候可以有嵌套查询来优化。具体还要自己多多总结。举一个例子 
实体表:student(id,name) teacher(id,name) 
联系表:s_t(sid,tid) 
考虑下面的查询 
select s.name 
from student s,s_t 
where s.id=s_t.sid and s_t.tid=1 
如果改为 
select s.name 
from student s 
where s.id in(select sid from s_t where s_t.tid=1) 
情况会如何呢? 
第一种查询先把两个表进行笛卡儿积,这时要进行处理的数据量会增加一个数量级,如果存在大量数据,性能就会急剧下降。 
第二种查询先搜索一个表(s_t),得到的结果是一个小批量的数据(无论原数据量有多大),再用student表的每一个元组遍历这个小批量数据集,性能大大得到提升。
------解决方案--------------------
引用:
有时候嵌套查询的效率还是挺高的,至少比多表连要高。多表连接在很大数据量的时候会使性能急剧下降,这时候可以有嵌套查询来优化。具体还要自己多多总结。举一个例子 
实体表:student(id,name) teacher(id,name) 
联系表:s_t(sid,tid) 
考虑下面的查询 
select s.name 
from student s,s_t 
where s.id=s_t.sid and s_t.tid=1 
如果改为 
select s.name 
from student s 
where s.id in(select sid from s_t where s…

你这种只能对小数量的表来说,如果数据量大,第二种方法根本用不上索引,得到的性能差远比笛卡尔积要差多了
  相关解决方案
本站暂不开放注册!
内测阶段只得通过邀请码进行注册!
 
  • 最近登录:Sun Apr 30 01:30:30 CST 2017
  • 最近登录:Sun Apr 30 01:30:30 CST 2017
  • 最近登录:Sun Apr 30 01:30:30 CST 2017
  • 最近登录:Sun Apr 30 01:30:30 CST 2017
  • 最近登录:Sun Apr 30 01:30:30 CST 2017