成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何編寫高效的數(shù)據(jù)庫代碼

運維 數(shù)據(jù)庫運維
眾所周知,數(shù)據(jù)庫是依據(jù)代碼存在的,雖然我們看到的不是代碼,但后臺中數(shù)據(jù)庫中全是一堆堆的代碼,本文我將為大家講解如何編寫高效的數(shù)據(jù)庫代碼。

導(dǎo)讀:數(shù)據(jù)庫代碼在數(shù)據(jù)庫中發(fā)揮著指揮者的重要作用,是這些代碼發(fā)號施令,將數(shù)據(jù)庫世界裝扮的多姿多彩,下文就主要教大家編寫出高效的數(shù)據(jù)庫代碼。

作為一個.NET開發(fā)者,我們經(jīng)常會發(fā)現(xiàn)自己置身于SQL Server查詢和存儲過程當中,一個很好的例子就是我最近開發(fā)的一個ASP.NET應(yīng)用軟件。

該軟件已經(jīng)開發(fā)完成并交付用戶進行測試,這個軟件使用了一個先有的SQL Server數(shù)據(jù)庫,大部分T-SQL已經(jīng)包含在預(yù)先定義的存儲過程中了(也就是說,我并沒有編寫它們),當我把軟件提交給用戶的時候,他們向我抱怨了性能問題。瓶頸源于數(shù)據(jù)庫層,所以我花費了大量的時間來調(diào)整T-SQL以提升性能。

在這篇文章中,我將和您共享一些在項目中發(fā)現(xiàn)的技巧,我使用的是SQL Server,不過很多項目對所有的數(shù)據(jù)庫平臺都是適用的。

難以避免

盡管大部分企業(yè)都擁有數(shù)據(jù)庫管理員和開發(fā)人員,但是很難避免對SQL Server的開發(fā),這是開發(fā)管理的迷題之一,很多數(shù)據(jù)庫開發(fā)人員告訴我因為我知道軟件的需求,所以由我來編寫查詢,盡管這種邏輯很難爭辯,但是要想精通T-SQL確實非常困難,而同時作為開發(fā)者還要學(xué)習(xí).NET平臺的多個層面。但是,基本的T-SQL語言還是具有一致性的,因此,讓我們來看看如何編寫高效的數(shù)據(jù)庫代碼。

優(yōu)化要點

和編寫任何程序代碼一樣,構(gòu)建T-SQL查詢的方法也不止一種,以下是提升性能的一些指導(dǎo)方針。

WHERE語句

您應(yīng)當適用WHERE語句來控制返回的數(shù)據(jù)行的數(shù)量,如果不使用WHERE語句,SQL Server會執(zhí)行對整個表格進行掃描并返回所有的行(如果確實需要這樣做,您可以不必適用WHERE語句,但是所有其他的情況下都要使用WHERE語句。)

您應(yīng)當使用WHERE語句來支持HAVING語句,當您將GROUP BY和HAVING語句一起使用的時候,GROUP BY會將數(shù)據(jù)行分為不同的組并聚合它們的值,然后HAVING語句會剔除不需要的組。在有些情況下,您可以編寫只包含WHERE和GROUP BY的語句而不需要HAVING語句。

數(shù)據(jù)列

使用星號(*)可以在查詢中很容易地返回所有數(shù)據(jù)列的值,您應(yīng)當只獲取必需的數(shù)據(jù)行。結(jié)果集合中的數(shù)據(jù)列越少,數(shù)據(jù)量就會越少,這樣網(wǎng)絡(luò)流量的負擔(dān)就會減小。性能的提升依賴于數(shù)據(jù)列的數(shù)量,所以對數(shù)據(jù)列進行限定是一種良好的習(xí)慣。

避免指針

SQL Server的指針功能可以在掃描結(jié)果中進行循環(huán),但是這一功能的代價就是性能。指針功能對于每夜的服務(wù)器任務(wù)來講是不錯的,但是要在您的應(yīng)用軟件的代碼/過程中避免使用指針。***使用選擇語句來返回需要的值并在客戶端處理這些數(shù)據(jù)。
有多少行?

T-SQL的COUNT函數(shù)可以在查詢中返回項目的數(shù)量,但是使用這個函數(shù)的時候可以指定一個數(shù)據(jù)列,從而提高性能,原因在于SELECT COUNT(*)在表格中執(zhí)行了一個全表格的掃描然后返回總數(shù)。

您可以在函數(shù)調(diào)用中指定一個數(shù)據(jù)列,如果只需要計算表格有多少數(shù)據(jù)行,您可以使用sysindexes表格(不必使用WHERE語句),在sysindexes表格中有一個名為ROWS的數(shù)據(jù)列,它包含了數(shù)據(jù)庫中所有表格的行數(shù),以下的代碼可以返回指定表格的數(shù)據(jù)行數(shù)量:

SELECT rows FROM sysindexes WHERE id = OBJECT_ID('table_name') AND indid < 2

唯一值

很多開發(fā)者喜歡在查詢中使用DISTINCT選項,它允許您返回唯一的數(shù)據(jù)行數(shù)值,絕無重復(fù),但是問題在于它降低了性能,所以您應(yīng)當在絕對需要的情況下使用它。

返回一部分數(shù)據(jù)行

您可能只需要一個查詢的子集,無論查詢可以返回的總數(shù)有多少,TOP操作符都可以幫您指定需要返回的項目的具體數(shù)字或者百分比,以下的查詢返回了10個項目:

SELECT ***0 CustomerID FROM Northwind.dbo.Orders WHERE Freight < 50.0

或者,您可以在總結(jié)果中返回一定的百分比:

SELECT TOP 5 percent CustomerID FROM Northwind.dbo.Orders WHERE Freight < 50.0

避免哪些代碼

您應(yīng)當避免沒有任何功能的代碼,這聽上去像是廢話,但是我確實碰到了無數(shù)的含有不執(zhí)行任何功能代碼的存儲過程,這可能是由于存儲過程的版本變化而遺留下來的,但是您應(yīng)當刪除掉這些不需要的代碼,或者您可以將它們變?yōu)樽⑨專@樣可以避免任何性能上的損失。

使用數(shù)據(jù)庫服務(wù)器

您應(yīng)當充分利用服務(wù)器平臺的優(yōu)勢使用存儲過程而不是在您的客戶端代碼中使用T-SQL,因為存儲過程是經(jīng)過服務(wù)器平臺優(yōu)化過的,所以應(yīng)該一直使用存儲過程以確保代碼運行的效率,此外,視圖功能也應(yīng)當用來替換大規(guī)模的查詢從而提高性能。

索引是您的朋友

如果正確使用索引可以提高查詢的性能,如何創(chuàng)建索引已經(jīng)超出了本文的范圍,但是有大量的資源提供了相關(guān)的信息。此外,SQL Server還提供了SQL Profiler工具來定位性能的瓶頸。

前路漫漫

即使您的.NET代碼通過了測試,一切也都按照計劃實現(xiàn)了功能,但是依然有很多數(shù)據(jù)庫端的工作要做,您可以通過多種方式來解決查詢的性能問題,我希望本文所介紹的方法為您提供了一個起點。另外,您還可以使用SQL Server的工具來識別查詢相關(guān)的問題。請在文章的討論區(qū)共享您在優(yōu)化查詢性能方面的經(jīng)驗。
 

這就是我要為大家介紹的關(guān)于編寫高效的數(shù)據(jù)庫代碼的方法,希望大家通過本文的學(xué)習(xí)之后,也能夠編寫高效的數(shù)據(jù)庫代碼。

【編輯推薦】

  1. 一句代碼實現(xiàn)批量數(shù)據(jù)綁定[上篇]
  2. DB2數(shù)據(jù)庫代碼頁不兼容解決方案
  3. Dreamweaver中連接SQL Server數(shù)據(jù)庫代碼
責(zé)任編輯:迎迎 來源: 百度
相關(guān)推薦

2010-06-12 12:45:14

高效MySQL數(shù)據(jù)庫

2010-05-14 10:39:32

MySQL數(shù)據(jù)庫

2010-07-13 11:47:47

2015-01-28 14:30:31

android代碼

2010-08-31 13:32:12

CSS

2009-01-11 17:32:03

Oracle數(shù)據(jù)庫重復(fù)數(shù)據(jù)

2014-11-10 09:59:08

jQuery

2011-11-25 10:35:20

Java

2014-07-18 14:03:06

Android高效編寫代碼

2012-07-23 14:30:33

Oracle

2024-01-30 08:54:05

JavaScript技巧代碼

2021-02-23 10:48:30

Python代碼開發(fā)

2020-09-21 06:58:56

TS 代碼建議

2024-03-07 12:11:31

PoetryPython代碼

2012-07-11 10:51:37

編程

2024-01-17 07:00:56

JIT 技術(shù)數(shù)據(jù)庫表達式求值

2011-03-14 15:47:33

Oracle數(shù)據(jù)庫

2011-07-13 10:36:53

Delphi

2010-04-13 10:42:08

Oracle數(shù)據(jù)庫

2023-07-06 14:37:05

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 精品一区二区三区av | 久久伊人影院 | 亚洲国产小视频 | 亚洲乱码国产乱码精品精98午夜 | 欧美色偷拍 | 久久久.com | 91黄在线观看 | 成人午夜免费在线视频 | 中文字幕成人在线 | 国产精品成人一区二区三区夜夜夜 | 日韩精品在线免费观看视频 | 99精品一区二区三区 | 久久久久久久亚洲精品 | 成人福利网站 | 欧美日韩久 | 亚洲福利一区二区 | 欧美日本高清 | 91社区在线观看播放 | 日韩精品一区二区三区在线观看 | 欧美国产日本一区 | 久久丝袜视频 | 欧美色专区 | 在线视频99 | 国产重口老太伦 | 精品欧美一区二区三区精品久久 | av无遮挡 | 永久免费视频 | 色秀网站| 日韩中文字幕视频在线观看 | 天天干视频 | 亚洲精品一区二区 | 日韩午夜影院 | 国产成人免费视频网站高清观看视频 | 欧美日韩精品久久久免费观看 | 亚洲精品2区 | 小川阿佐美pgd-606在线 | 成人在线免费视频观看 | 热久久久久 | 午夜视频在线观看网址 | 日韩视频1 | 日韩亚洲欧美综合 |