當前位置:首頁 » 編程語言 » 優化sql的方法

優化sql的方法

發布時間: 2024-01-24 14:31:57

sql常見優化Sql查詢性能的方法有哪些

SQL常見優化Sql查詢性能的方法有哪些
可以通過如下方法來優化查詢 1、把數據、日誌、索引放到不同的I/O設備上,增加讀取速度,以前可以將Tempdb應放在RAID0上,SQL2000不在支持。數據量(尺寸)越大,提高I/O越重要. 2、縱向、橫向分割表,減少表的尺寸(sp_spaceuse) 3、升級硬體 4、根據查詢條件,建立索引,優化索引、優化訪問方式,限制結果集的數據量。注意填充因子要適當(最好是使用默認值0)。索引應該盡量小,使用位元組數小的列建索引好(參照索引的創建),不要對有限的幾個值的欄位建單一索引如性別欄位

② 如何進行SQL性能優化

這里分享下mysql優化的幾種方法。

1、首先在打開的軟體中,需要分別為每一個表創建 InnoDB FILE的文件。

③ 大數據干貨:SQL優化方案精解十則

一、避免進行null判斷

應盡量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,這里最好不要給資料庫留NULL,盡可能的使用 NOT NULL填充資料庫。

備注、描述、評論之類的可以設置為 NULL,最好不要使用NULL。不要錯誤的認為NULL 不需要空間,如char(100) 型,在欄位建立時,空間就固定了。不管是否插入值(NULL也包含在內),都是佔用 100個字元的空間的,如果是varchar這樣的變長欄位, null 不佔用空間。可以在num上設置默認值0,確保表中num列沒有null值。

二、不要使用select *

使用select *的話會增加解析的時間,另外也會把不需要的數據同時查詢出來,從而延長數據傳輸時間,耗費精力。如text類型的欄位,通常用來保存一些內容比較繁雜的東西,如果使用select *,則會把該欄位也查詢出來。

三、謹慎使用模糊查詢

當模糊匹配以%開頭時,該列索引將失效。若不以%開頭,該列索引有效。

四、不要使用列號

使用列號的話,將會增加不必要的解析時間。

五、優先使用UNION ALL,避免使用UNION

因為UNION 會將各查詢子集的記錄做比較,故比起UNION ALL ,通常速度都會慢上許多。一般來說,如果使用UNION ALL能滿足要求的話,務必使用UNION ALL。還有一種情況,如果業務上能夠確保不會出現重復記錄。

六、在where語句或者order by語句中避免對索引欄位進行計算操作

當在索引列上進行操作之後,索引將會失效。正確做法應該是將值計算好再傳入進來。

七、使用not exist代替not in

如果查詢語句使用了not in 那麼內外表都進行全表掃描,沒有用到索引;而not extsts 的子查詢依然能用到表上的索引。

八、exist和in的區別

in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環

再對內表進行查詢。因此,in用到的是外表的索引, exists用到的是內表的索引。如果查詢的兩個表大小相當,那麼用in和exists差別不大。如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in。

九、避免在索引列上做如下操作

1.避免在索引列上使用IS NULL和IS NOT NULL。

2.避免在索引列上出現數據類型轉換。(比如某欄位是String類型,參數傳入時是int類型)當在索引列上使用如上操作時,索引將會失效,造成全表掃描。

十、復雜操作可以考慮適當拆成幾步

有時候會有通過一個SQL語句來實現復雜業務的例子出現,為了實現復雜的業務,嵌套多級子查詢。造成SQL性能問題。對於這種情況可以考慮拆分SQL,通過多個SQL語句實現,或者把部分程序能完成的工作交給程序完成。

④ sql調優的幾種方式

你好,
SQL優化的一些方法
1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
2.應盡量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描。
3.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。
4.應盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描。
5.in 和 not in 也要慎用,否則會導致全表掃描,
6.下面的查詢也將導致全表掃描:
select id from t where name like '%abc%'
7.應盡量避免在 where 子句中對欄位進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描。
8.應盡量避免在where子句中對欄位進行函數操作,這將導致引擎放棄使用索引而進行全表掃描。
9.不要在 where 子句中的「=」左邊進行函數、算術運算或其他表達式運算,否則系統將可能無法正確使用索引。
10.在使用索引欄位作為條件時,如果該索引是復合索引,那麼必須使用到該索引中的第一個欄位作為條件時才能保證系統使用該索引,否則該索引將不會被使用,並且應盡可能的讓欄位順序與索引順序相一致。

熱點內容
龍村m腳本 發布:2024-11-29 17:38:10 瀏覽:784
linuxc配置文件 發布:2024-11-29 17:08:31 瀏覽:828
wow刷碎片腳本 發布:2024-11-29 15:58:24 瀏覽:592
明小子源碼 發布:2024-11-29 15:15:30 瀏覽:145
蘋果8plus什麼配置 發布:2024-11-29 14:16:36 瀏覽:677
androidmvp結構 發布:2024-11-29 14:16:34 瀏覽:536
androidsqlite命令 發布:2024-11-29 14:04:38 瀏覽:156
信用卡分期演算法 發布:2024-11-29 13:50:56 瀏覽:808
安卓手機dll文件為什麼打不開 發布:2024-11-29 13:40:49 瀏覽:1003
百分之五十石碳酸怎麼配置 發布:2024-11-29 13:38:56 瀏覽:974