由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Database版 - best practices for sql developer
相关主题
大家绝不觉得干DB这行挺难进步的?一个求和的有日期限制的sql query 问题.
Enterprise data warehouse team is looking for developers an请教 sql server index问题
BI+Big Data+CRM 项目实践Business Intelligence vs DataWareHouse
老印给我的一个Challenge找工作求助
Is very-large database the same w/ datawarehouse?teradata 的问题
请教sql server DB 大侠【招聘】淘宝网 - DB Architect, Sr. DB Engineer, Sr. DBA - (转载)
beijing呀,教教我怎么optimize sql server吧。SQL Server DBA vs BI & DW
问个关于sql query 运行速度的问题JDBC
相关话题的讨论汇总
话题: table话题: update话题: sql话题: use话题: never
进入Database版参与讨论
1 (共1页)
g***l
发帖数: 18555
1
随便总结了一下,不包括ETL,抛砖引玉了,
1. never use * in query, only use specific columns and rows you need, never
use extra
2. table uses dbo prefix, selection uses with (nolock)
3. repeated code section can be replace by UDF or stored procedure
4. join is always on the key. if join is not the key, you need to be very
careful
5. layout flow chart for complicated stored procedure before coding
6. CTE is a good choice to replace subquery, table variable and temp table
7. all the work should be done on the temp table to prevent blocking before
insert/update transaction table
8. use query execution plan for better performance
9. avoid cursor if possible.
10. avoid long update/insert/delete, use batch instead.
11. if value has no change, do not update. Comparison is less costly than
update in OLTP. use if exists to guard
B*****g
发帖数: 34098
2
序号不对吧。
另外还是应该解释一下cursor。尽量不用cursor是指尽量不要用cursor一次只loop一个
record。

never
before

【在 g***l 的大作中提到】
: 随便总结了一下,不包括ETL,抛砖引玉了,
: 1. never use * in query, only use specific columns and rows you need, never
: use extra
: 2. table uses dbo prefix, selection uses with (nolock)
: 3. repeated code section can be replace by UDF or stored procedure
: 4. join is always on the key. if join is not the key, you need to be very
: careful
: 5. layout flow chart for complicated stored procedure before coding
: 6. CTE is a good choice to replace subquery, table variable and temp table
: 7. all the work should be done on the temp table to prevent blocking before

g***l
发帖数: 18555
3
有时候确实要用CURSOR的,虽然慢,但不LOCK,对特别忙的OLTP

【在 B*****g 的大作中提到】
: 序号不对吧。
: 另外还是应该解释一下cursor。尽量不用cursor是指尽量不要用cursor一次只loop一个
: record。
:
: never
: before

g***l
发帖数: 18555
4
今天有个工作,大公司,PRINCIPAL SQL DEVELOPER,虽然不是喜欢的工作,我也去递
简历了,觉得自己比一般的DEVELOPER强。
s**********0
发帖数: 266
5
能不能讲讲10的理由? 如果整个insert, update, delete 是在一个transcation里(
一有错就要全部rollback) 这么做不是更费事? 用不用batch所有的数据不是都一直被
lock着?
还有,你去面试SQL developer的时候是不是经常会被问到一些一般的programming的问
题? (像 class inheritance,algorithm 之类的问题?) 刚开始找新工作,已经连
着两次遇到这样的phone interview了,job description 里都是一些ETL,Data
Warehouse, reporting 和 building Cubes的要求,面试偏偏问了很多关于编程的东
西。
B*****g
发帖数: 34098
6
when you use batch, you can add COMMIT for each batch.

【在 s**********0 的大作中提到】
: 能不能讲讲10的理由? 如果整个insert, update, delete 是在一个transcation里(
: 一有错就要全部rollback) 这么做不是更费事? 用不用batch所有的数据不是都一直被
: lock着?
: 还有,你去面试SQL developer的时候是不是经常会被问到一些一般的programming的问
: 题? (像 class inheritance,algorithm 之类的问题?) 刚开始找新工作,已经连
: 着两次遇到这样的phone interview了,job description 里都是一些ETL,Data
: Warehouse, reporting 和 building Cubes的要求,面试偏偏问了很多关于编程的东
: 西。

g***l
发帖数: 18555
7
TRANSACTION很忙的TABLE,你如果UPDATE的话,就会LOCK住TABLE,别人想INSERT
UPDATE DELETE就不行了,UPDATE的时间越长LOCK的时间也就越长,UPDATE语句
IMPLICITLY BEGIN TRAN COMMIT TRAN。所以分成几个小块去UPDATE,RUN完一个休息
一下,让其他的TRASACTION有时间COMPLETE,再RUN
下一个。比如,你要UPDATE一万个ORDR,估计一 下需要多长时间,如果UPDATE的VALUE
多,可能会10分钟,或者一个小时,可以分成10个TRANSACTION去 UPDATE,每个一分钟
或者6分钟,就不至于一LOCK就是一个小时,LOCK越来越多,系统就会出问题。
s**********0
发帖数: 266
8
但是 ETL 的时候一个partially updated table是非常非常麻烦的。 你要多花很多功
夫设计 SSIS 里的restarting points。 (如果你commit一个 Foreach container
loop 里的每一个statement, 一旦运行到一半出了错你要restart会非常麻烦的。 特
别是有些type 2 slowly changing dimensions)
g***l
发帖数: 18555
9
ETL是TOTALY DIFFERENT STORY了,我讲的是OLTP的系统,你的是OLAP的,OLAP讲的是利
用内存快速的把数据全部LOAD进LOCAL TABLE,避免VALIDATATION和DATA TYPE CHECK,
进到系统里以后再VALIDATE,这是我个人的经验。

【在 s**********0 的大作中提到】
: 但是 ETL 的时候一个partially updated table是非常非常麻烦的。 你要多花很多功
: 夫设计 SSIS 里的restarting points。 (如果你commit一个 Foreach container
: loop 里的每一个statement, 一旦运行到一半出了错你要restart会非常麻烦的。 特
: 别是有些type 2 slowly changing dimensions)

v*****r
发帖数: 1119
10
标题应该改一下: Best practices for sql developer of MS SQLServer.
不然很让人误解.
有些不敢苟同:
1. never use * in query ...
Comment: Never say "never", 难道就没有碰到过需要 query 一个表所有columns 的
时候?我是经常见:-)
4. join is always on the key ...
Comment: The joined columns don't have to be the key columns, for efficient
join, they just need to be indexed.
7. All the work should be done on the temp table to prevent blocking before
insert/update transaction table.
Comment: Poor design of Sybase (SQL Server should not be blamed:-) has made
this performance workaround a "best practice".
8. Avoid cursor if possible.
Comment: Again, poor implementation of Cursor concept(Sybase, SQLServer, not
sure which one should be blamed) has made Cursor, one of the most powerful
programming construct in Oracle, basically useless in SQLServer.

never
before

【在 g***l 的大作中提到】
: 随便总结了一下,不包括ETL,抛砖引玉了,
: 1. never use * in query, only use specific columns and rows you need, never
: use extra
: 2. table uses dbo prefix, selection uses with (nolock)
: 3. repeated code section can be replace by UDF or stored procedure
: 4. join is always on the key. if join is not the key, you need to be very
: careful
: 5. layout flow chart for complicated stored procedure before coding
: 6. CTE is a good choice to replace subquery, table variable and temp table
: 7. all the work should be done on the temp table to prevent blocking before

相关主题
请教sql server DB 大侠一个求和的有日期限制的sql query 问题.
beijing呀,教教我怎么optimize sql server吧。请教 sql server index问题
问个关于sql query 运行速度的问题Business Intelligence vs DataWareHouse
进入Database版参与讨论
i****a
发帖数: 36252
11
1. never use * in query ...
Comment: Never say "never", 难道就没有碰到过需要 query 一个表所有columns 的
时候?我是经常见:-)
Even if all columns are needed, avoid using select *. list all columns
specifically. So when somebody adds a column to the table it doesn't break
your program.

efficient
before

【在 v*****r 的大作中提到】
: 标题应该改一下: Best practices for sql developer of MS SQLServer.
: 不然很让人误解.
: 有些不敢苟同:
: 1. never use * in query ...
: Comment: Never say "never", 难道就没有碰到过需要 query 一个表所有columns 的
: 时候?我是经常见:-)
: 4. join is always on the key ...
: Comment: The joined columns don't have to be the key columns, for efficient
: join, they just need to be indexed.
: 7. All the work should be done on the temp table to prevent blocking before

g***l
发帖数: 18555
12
任何事情都是有EXCEPTION,所谓BEST PRACTICE么,就是尽量地做到,做不到的时候要
小心。另外,还有人用SYBASE吗,死菜了?LOL
v*****r
发帖数: 1119
13
Agree, I used a bad excuses to justify use of "*". Still I will try to avoid
using "never" for proposing best practices.

【在 i****a 的大作中提到】
: 1. never use * in query ...
: Comment: Never say "never", 难道就没有碰到过需要 query 一个表所有columns 的
: 时候?我是经常见:-)
: Even if all columns are needed, avoid using select *. list all columns
: specifically. So when somebody adds a column to the table it doesn't break
: your program.
:
: efficient
: before

v*****r
发帖数: 1119
14
SQLServer 不是 Window 版的 Sybase 吗?

【在 g***l 的大作中提到】
: 任何事情都是有EXCEPTION,所谓BEST PRACTICE么,就是尽量地做到,做不到的时候要
: 小心。另外,还有人用SYBASE吗,死菜了?LOL

g***l
发帖数: 18555
15
我都很久没有见过SYBASE SQL招人的广告了。

【在 v*****r 的大作中提到】
: SQLServer 不是 Window 版的 Sybase 吗?
B*****g
发帖数: 34098
16
要厚到,哈哈。

【在 g***l 的大作中提到】
: 我都很久没有见过SYBASE SQL招人的广告了。
v*****r
发帖数: 1119
17
大公司用 sybase 的还是不少吧.
想起了sybase 和 sqlserver 的老祖宗 Ingres. 头几年去一家公司,finance
application 还是 Ingres based, 我帮着管过几天. 去参加了一个 Ingres 的 User
group meeting, 到会的竟然有五十来家用户, 其中不乏一些大公司。 不过开完会回
来没多久我们就把它 migrate 到 Oracle 上去了。

【在 g***l 的大作中提到】
: 我都很久没有见过SYBASE SQL招人的广告了。
B*****g
发帖数: 34098
18
oracle有工作要贴出来。

【在 v*****r 的大作中提到】
: 大公司用 sybase 的还是不少吧.
: 想起了sybase 和 sqlserver 的老祖宗 Ingres. 头几年去一家公司,finance
: application 还是 Ingres based, 我帮着管过几天. 去参加了一个 Ingres 的 User
: group meeting, 到会的竟然有五十来家用户, 其中不乏一些大公司。 不过开完会回
: 来没多久我们就把它 migrate 到 Oracle 上去了。

g***l
发帖数: 18555
19
SQL SERVER现在都快变LEGACY了,大公司都蜂拥ORACLE去了,我现在也被逼的去学
ORACLE。

【在 v*****r 的大作中提到】
: 大公司用 sybase 的还是不少吧.
: 想起了sybase 和 sqlserver 的老祖宗 Ingres. 头几年去一家公司,finance
: application 还是 Ingres based, 我帮着管过几天. 去参加了一个 Ingres 的 User
: group meeting, 到会的竟然有五十来家用户, 其中不乏一些大公司。 不过开完会回
: 来没多久我们就把它 migrate 到 Oracle 上去了。

B*****g
发帖数: 34098
20
你假如组织了吗?

【在 g***l 的大作中提到】
: SQL SERVER现在都快变LEGACY了,大公司都蜂拥ORACLE去了,我现在也被逼的去学
: ORACLE。

相关主题
找工作求助SQL Server DBA vs BI & DW
teradata 的问题JDBC
【招聘】淘宝网 - DB Architect, Sr. DB Engineer, Sr. DBA - (转载)面试问题How would you improve table insert performance? (give five or more ideas)
进入Database版参与讨论
g***l
发帖数: 18555
21
木有来,去看看

【在 B*****g 的大作中提到】
: 你假如组织了吗?
a9
发帖数: 21638
22
我宁可count(*),哈哈。



【在 i****a 的大作中提到】
: 1. never use * in query ...
: Comment: Never say "never", 难道就没有碰到过需要 query 一个表所有columns 的
: 时候?我是经常见:-)
: Even if all columns are needed, avoid using select *. list all columns
: specifically. So when somebody adds a column to the table it doesn't break
: your program.
:
: efficient
: before

B*****g
发帖数: 34098
23
很多人认为count(1)比count(*)强


break
columns

【在 a9 的大作中提到】
: 我宁可count(*),哈哈。
:
: 的

a9
发帖数: 21638
24
profiler一下就行了呗。

columns

【在 B*****g 的大作中提到】
: 很多人认为count(1)比count(*)强
:
: 的
: break
: columns

g***l
发帖数: 18555
25
支持,经常用的还有IF EXISTS (SELECT TOP 1 1 FROM XXX)

【在 B*****g 的大作中提到】
: 很多人认为count(1)比count(*)强
:
: 的
: break
: columns

B*****g
发帖数: 34098
26
嘿嘿,反正oracle这些都是一样的。不过asktom上关于count(1)和count(*)骂战还是挺
有意思的。最基本的,都已经是cbo,起码也要看了ep再说。hoho

【在 g***l 的大作中提到】
: 支持,经常用的还有IF EXISTS (SELECT TOP 1 1 FROM XXX)
a***y
发帖数: 2803
27
? 现在的公司不是会重用你吗?

【在 g***l 的大作中提到】
: 今天有个工作,大公司,PRINCIPAL SQL DEVELOPER,虽然不是喜欢的工作,我也去递
: 简历了,觉得自己比一般的DEVELOPER强。

B*****g
发帖数: 34098
28
跳一跳,工资职称涨一涨

【在 a***y 的大作中提到】
: ? 现在的公司不是会重用你吗?
g***l
发帖数: 18555
29
该学的东西都学到了,除非老板去了,我做个小MANAGER,老板比我年纪还小,我还有
什么希望,跳是肯定的。

【在 a***y 的大作中提到】
: ? 现在的公司不是会重用你吗?
k********e
发帖数: 702
30
informix........
相关主题
说说俺们这以前一个老印的code,滥用CTEEnterprise data warehouse team is looking for developers an
Database vs Data WarehouseBI+Big Data+CRM 项目实践
大家绝不觉得干DB这行挺难进步的?老印给我的一个Challenge
进入Database版参与讨论
k********e
发帖数: 702
31
新sql server上也没区别了。
加一条:
use RANK 避免 self join

【在 B*****g 的大作中提到】
: 嘿嘿,反正oracle这些都是一样的。不过asktom上关于count(1)和count(*)骂战还是挺
: 有意思的。最基本的,都已经是cbo,起码也要看了ep再说。hoho

B*****g
发帖数: 34098
32
partition by! which will solve 90% some sql questions here

【在 k********e 的大作中提到】
: 新sql server上也没区别了。
: 加一条:
: use RANK 避免 self join

1 (共1页)
进入Database版参与讨论
相关主题
JDBCIs very-large database the same w/ datawarehouse?
面试问题How would you improve table insert performance? (give five or more ideas)请教sql server DB 大侠
说说俺们这以前一个老印的code,滥用CTEbeijing呀,教教我怎么optimize sql server吧。
Database vs Data Warehouse问个关于sql query 运行速度的问题
大家绝不觉得干DB这行挺难进步的?一个求和的有日期限制的sql query 问题.
Enterprise data warehouse team is looking for developers an请教 sql server index问题
BI+Big Data+CRM 项目实践Business Intelligence vs DataWareHouse
老印给我的一个Challenge找工作求助
相关话题的讨论汇总
话题: table话题: update话题: sql话题: use话题: never