亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
SQL語句優(yōu)化原則,sql語句優(yōu)化
首頁 php教程 php手冊 SQL語句優(yōu)化原則,sql語句優(yōu)化

SQL語句優(yōu)化原則,sql語句優(yōu)化

Jun 13, 2016 am 08:57 AM
sql語句

SQL語句優(yōu)化原則,sql語句優(yōu)化

?

處理百萬級以上的數(shù)據(jù)提高查詢速度的方法:

1.應(yīng)盡量避免在?where?子句中使用!=或操作符,否則將引擎放棄使用索引而進行全表掃描。

?2.對查詢進行優(yōu)化,應(yīng)盡量避免全表掃描,首先應(yīng)考慮在?where?及?order?by?涉及的列上建立索引。

?3.應(yīng)盡量避免在?where?子句中對字段進行?null?值判斷,否則將導(dǎo)致引擎放棄使用索引而進行全表掃描,

如:
?????select?id?from?t?where?num?is?null
?????可以在num上設(shè)置默認值0,確保表中num列沒有null值,然后這樣查詢:
?????select?id?from?t?where?num=0

?4.應(yīng)盡量避免在?where?子句中使用?or?來連接條件,否則將導(dǎo)致引擎放棄使用索引而進行全表掃描,如:
?????select?id?from?t?where?num=10?or?num=20
?????可以這樣查詢:
?????select?id?from?t?where?num=10
?????union?all
?????select?id?from?t?where?num=20

?5.下面的查詢也將導(dǎo)致全表掃描:(不能前置百分號)
?????select?id?from?t?where?name?like?‘%abc%’
????若要提高效率,可以考慮全文檢索。

?6.in?和?not?in?也要慎用,否則會導(dǎo)致全表掃描,如:
?????select?id?from?t?where?num?in(1,2,3)
?????對于連續(xù)的數(shù)值,能用?between?就不要用?in?了:
?????select?id?from?t?where?num?between?1?and?3

select?xx,phone?FROM?send??a?JOIN?(
?select?'13891030091'?phone??union?select?'13992085916'?…………??UNION??SELECT?'13619100234'?)?b?
??on??a.Phone=b.phone
--替代下面??很多數(shù)據(jù)隔開的時候
in('13891030091','13992085916','13619100234'…………)

?

7.如果在?where?子句中使用參數(shù),也會導(dǎo)致全表掃描。因為SQL只有在運行時才會解析局部變量,但優(yōu)化程序不能將訪問計劃的選擇推遲到運行時;它必須在編譯時進行選擇。然?而,如果在編譯時建立訪問計劃,變量的值還是未知的,因而無法作為索引選擇的輸入項。如下面語句將進行全表掃描:
?????select?id?from?t?where?num=@num?????可以改為強制查詢使用索引:
?????select?id?from?t?with(index(索引名))?where?num=@num

?8.應(yīng)盡量避免在?where?子句中對字段進行表達式操作,這將導(dǎo)致引擎放棄使用索引而進行全表掃描。如:
?????select?id?from?t?where?num/2=100
?????應(yīng)改為:
?????select?id?from?t?where?num=100*2

?9.應(yīng)盡量避免在where子句中對字段進行函數(shù)操作,這將導(dǎo)致引擎放棄使用索引而進行全表掃描。如:
?????select?id?from?t?where?substring(name,1,3)=’abc’–name以abc開頭的id
?????select?id?from?t?where?datediff(day,createdate,’2005-11-30′)=0–’2005-11-30′生成的id
?????應(yīng)改為:
?????select?id?from?t?where?name?like?‘a(chǎn)bc%’
?????select?id?from?t?where?createdate>=’2005-11-30′?and?createdate2005-12-1

?10.不要在?where?子句中的“=”左邊進行函數(shù)、算術(shù)運算或其他表達式運算,否則系統(tǒng)將可能無法正確使用索引。

?11.在使用索引字段作為條件時,如果該索引是復(fù)合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統(tǒng)使用該索引,否則該索引將不會被使?用,并且應(yīng)盡可能的讓字段順序與索引順序相一致。

?12.不要寫一些沒有意義的查詢,如需要生成一個空表結(jié)構(gòu):
?????select?col1,col2?into?#t?from?t?where?1=0
?????這類代碼不會返回任何結(jié)果集,但是會消耗系統(tǒng)資源的,應(yīng)改成這樣:
?????create?table?#t(…)

?13.很多時候用?exists?代替?in?是一個好的選擇:
?????select?num?from?a?where?num?in(select?num?from?b)
?????用下面的語句替換:
?????select?num?from?a?where?exists(select?1?from?b?where?num=a.num)

?14.并不是所有索引對查詢都有效,SQL是根據(jù)表中數(shù)據(jù)來進行查詢優(yōu)化的,當索引列有大量數(shù)據(jù)重復(fù)時,SQL查詢可能不會去利用索引,如一表中有字段?sex,male、female幾乎各一半,那么即使在sex上建了索引也對查詢效率起不了作用。

?15.索引并不是越多越好,索引固然可以提高相應(yīng)的?select?的效率,但同時也降低了?insert?及?update?的效率,因為?insert?或?update?時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數(shù)最好不要超過6個,若太多則應(yīng)考慮一些不常使用到的列上建的索引是否有?必要。

?16.應(yīng)盡可能的避免更新?clustered?索引數(shù)據(jù)列,因為?clustered?索引數(shù)據(jù)列的順序就是表記錄的物理存儲順序,一旦該列值改變將導(dǎo)致整個表記錄的順序的調(diào)整,會耗費相當大的資源。若應(yīng)用系統(tǒng)需要頻繁更新?clustered?索引數(shù)據(jù)列,那么需要考慮是否應(yīng)將該索引建為?clustered?索引。

?17.盡量使用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計為字符型,這會降低查詢和連接的性能,并會增加存儲開銷。這是因為引擎在處理查詢和連接時會?逐個比較字符串中每一個字符,而對于數(shù)字型而言只需要比較一次就夠了。

?18.盡可能的使用?varchar/nvarchar?代替?char/nchar?,因為首先變長字段存儲空間小,可以節(jié)省存儲空間,其次對于查詢來說,在一個相對較小的字段內(nèi)搜索效率顯然要高些。

?19.任何地方都不要使用?select?*?from?t?,用具體的字段列表代替“*”,不要返回用不到的任何字段。

?20.盡量使用表變量來代替臨時表。如果表變量包含大量數(shù)據(jù),請注意索引非常有限(只有主鍵索引)。

?21.避免頻繁創(chuàng)建和刪除臨時表,以減少系統(tǒng)表資源的消耗。

?22.臨時表并不是不可使用,適當?shù)厥褂盟鼈兛梢允鼓承├谈行?,例如,當需要重?fù)引用大型表或常用表中的某個數(shù)據(jù)集時。但是,對于一次性事件,最好使?用導(dǎo)出表。

?23.在新建臨時表時,如果一次性插入數(shù)據(jù)量很大,那么可以使用?select?into?代替?create?table,避免造成大量?log?,以提高速度;如果數(shù)據(jù)量不大,為了緩和系統(tǒng)表的資源,應(yīng)先create?table,然后insert。

?24.如果使用到了臨時表,在存儲過程的最后務(wù)必將所有的臨時表顯式刪除,先?truncate?table?,然后?drop?table?,這樣可以避免系統(tǒng)表的較長時間鎖定。

?25.盡量避免使用游標,因為游標的效率較差,如果游標操作的數(shù)據(jù)超過1萬行,那么就應(yīng)該考慮改寫。

?26.使用基于游標的方法或臨時表方法之前,應(yīng)先尋找基于集的解決方案來解決問題,基于集的方法通常更有效。

?27.與臨時表一樣,游標并不是不可使用。對小型數(shù)據(jù)集使用?FAST_FORWARD?游標通常要優(yōu)于其他逐行處理方法,尤其是在必須引用幾個表才能獲得所需的數(shù)據(jù)時。在結(jié)果集中包括“合計”的例程通常要比使用游標執(zhí)行的速度快。如果開發(fā)時?間允許,基于游標的方法和基于集的方法都可以嘗試一下,看哪一種方法的效果更好。

?28.在所有的存儲過程和觸發(fā)器的開始處設(shè)置?SET?NOCOUNT?ON?,在結(jié)束時設(shè)置?SET?NOCOUNT?OFF?。無需在執(zhí)行存儲過程和觸發(fā)器的每個語句后向客戶端發(fā)送?DONE_IN_PROC?消息。

?29.盡量避免向客戶端返回大數(shù)據(jù)量,若數(shù)據(jù)量過大,應(yīng)該考慮相應(yīng)需求是否合理。

?30.盡量避免大事務(wù)操作,提高系統(tǒng)并發(fā)能力。?

文章來源:http://www.cnblogs.com/pepcod/archive/2013/01/01/2913496.html

?

?

優(yōu)化sql的文章參考:

?

http://www.cnblogs.com/ATree/archive/2011/02/13/sql_optimize_1.html

http://blog.csdn.net/csh624366188/article/details/8457749

http://www.iteye.com/problems/100945

http://blog.itpub.net/28389881/viewspace-1301549/? ? ? ? ? ? ? ?一個insert插入語句很慢的優(yōu)化?

?

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應(yīng)法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
給MySQL表添加和刪除字段的操作步驟 給MySQL表添加和刪除字段的操作步驟 Apr 29, 2025 pm 04:15 PM

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,刪除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段時,需指定位置以優(yōu)化查詢性能和數(shù)據(jù)結(jié)構(gòu);刪除字段前需確認操作不可逆;使用在線DDL、備份數(shù)據(jù)、測試環(huán)境和低負載時間段修改表結(jié)構(gòu)是性能優(yōu)化和最佳實踐。

sql server怎么用sql語句創(chuàng)建表 sql server怎么用sql語句創(chuàng)建表 Apr 09, 2025 pm 03:48 PM

在 SQL Server 中使用 SQL 語句創(chuàng)建表的方法:打開 SQL Server Management Studio 并連接到數(shù)據(jù)庫服務(wù)器。選擇要創(chuàng)建表的數(shù)據(jù)庫。輸入 CREATE TABLE 語句,指定表名、列名、數(shù)據(jù)類型和約束。單擊執(zhí)行按鈕創(chuàng)建表。

如何解決SQL解析問題?使用greenlion/php-sql-parser可以! 如何解決SQL解析問題?使用greenlion/php-sql-parser可以! Apr 17, 2025 pm 09:15 PM

在開發(fā)一個需要解析SQL語句的項目時,我遇到了一個棘手的問題:如何高效地解析MySQL的SQL語句,并提取其中的關(guān)鍵信息。嘗試了多種方法后,我發(fā)現(xiàn)greenlion/php-sql-parser這個庫能夠完美解決我的需求。

PHP如何使用phpMyadmin創(chuàng)建Mysql數(shù)據(jù)庫 PHP如何使用phpMyadmin創(chuàng)建Mysql數(shù)據(jù)庫 Apr 10, 2025 pm 10:48 PM

phpMyAdmin 可用于在 PHP 項目中創(chuàng)建數(shù)據(jù)庫。具體步驟如下:登錄 phpMyAdmin,點擊“新建”按鈕。輸入要創(chuàng)建的數(shù)據(jù)庫的名稱,注意符合 MySQL 命名規(guī)則。設(shè)置字符集,如 UTF-8,以避免亂碼問題。

sql語句三個表連接怎么寫教程 sql語句三個表連接怎么寫教程 Apr 09, 2025 pm 02:03 PM

本文介紹了一種使用 SQL 語句連接三個表的詳細教程,指導(dǎo)讀者逐步了解如何有效地關(guān)聯(lián)不同表中的數(shù)據(jù)。通過示例和詳細的語法講解,本文將幫助您掌握 SQL 中表的連接技術(shù),從而能夠高效地從數(shù)據(jù)庫中檢索關(guān)聯(lián)信息。

phpMyAdmin全面使用指南 phpMyAdmin全面使用指南 Apr 10, 2025 pm 10:42 PM

phpMyAdmin不僅僅是數(shù)據(jù)庫管理工具,它能讓你深入理解MySQL,提升編程技巧。核心功能包括CRUD和SQL查詢執(zhí)行,理解SQL語句的原理至關(guān)重要。高級技巧包括導(dǎo)出/導(dǎo)入數(shù)據(jù)和權(quán)限管理,需要深入的安全理解。潛在問題包括SQL注入,解決方案是參數(shù)化查詢和備份。性能優(yōu)化涉及SQL語句優(yōu)化和索引使用。最佳實踐強調(diào)代碼規(guī)范、安全實踐和定期備份。

centos postgresql資源監(jiān)控 centos postgresql資源監(jiān)控 Apr 14, 2025 pm 05:57 PM

CentOS系統(tǒng)下PostgreSQL數(shù)據(jù)庫資源監(jiān)控方案詳解本文介紹多種監(jiān)控CentOS系統(tǒng)上PostgreSQL數(shù)據(jù)庫資源的方法,助您及時發(fā)現(xiàn)并解決潛在性能問題。一、利用PostgreSQL內(nèi)置工具和視圖PostgreSQL自帶豐富的工具和視圖,可直接用于性能和狀態(tài)監(jiān)控:pg_stat_activity:查看當前活動連接和查詢信息。pg_stat_statements:收集SQL語句統(tǒng)計信息,分析查詢性能瓶頸。pg_stat_database:提供數(shù)據(jù)庫層面的統(tǒng)計數(shù)據(jù),例如事務(wù)數(shù)、緩存命中

See all articles