常用sql語句及其優化

文章目錄

  • 介紹
  • 常用sql語句
    • 1. 數據查詢
      • 1.1 SELECT 語句
      • 1.2 DISTINCT 關鍵字
      • 1.3 WHERE 子句
      • 1.4 ORDER BY 子句
      • 1.5 LIMIT 關鍵字
    • 2. 數據更新
      • 2.1 INSERT INTO 語句
      • 2.2 UPDATE 語句
      • 2.3 DELETE FROM 語句
    • 3. 數據管理
      • 3.1 CREATE TABLE 語句
      • 3.2 ALTER TABLE 語句
      • 3.3 DROP TABLE 語句
  • 常用關聯查詢表
    • 1. 內連接(INNER JOIN)
    • 2. 左連接(LEFT JOIN)
    • 3. 右連接(RIGHT JOIN)
    • 4. 全連接(FULL JOIN)
  • 多表關聯
    • 1. 多表連接(JOIN)
    • 2. 聯合查詢(UNION)
    • 3. 子查詢(Subquery)
  • sql查詢性能優化
    • 1. SQL 查詢語句優化
    • 1. 使用索引
    • 2. 索引優化
    • 3. 數據庫統計信息
    • 4. 查詢緩存
    • 5. 查詢優化工具
    • 6. 數據庫配置優化
    • 7. 數據分區和分片

介紹

SQL 是結構化查詢語言(Structured Query Language)的簡稱,是用于管理關系型數據庫的標準化語言。而SQL 查詢性能優化是提高數據庫查詢速度和效率的關鍵步驟。通過優化 SQL 查詢語句、索引設計和數據庫配置,可以顯著提升系統性能和響應時間。

常用sql語句

1. 數據查詢

1.1 SELECT 語句

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • 用于從數據庫中檢索數據,可以指定需要返回的字段和條件。

1.2 DISTINCT 關鍵字

SELECT DISTINCT column1, column2, ...
FROM table_name;
  • 用于返回唯一不重復的值。

1.3 WHERE 子句

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • 用于過濾數據,根據指定條件篩選所需的數據。

1.4 ORDER BY 子句

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC];
  • 用于對結果集進行排序,默認按升序排列,也可以指定降序排列。

1.5 LIMIT 關鍵字

SELECT column1, column2, ...
FROM table_name
LIMIT number_of_records;
  • 用于限制結果集的行數。

2. 數據更新

2.1 INSERT INTO 語句

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
  • 用于向表中插入新的行。

2.2 UPDATE 語句

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
  • 用于修改表中已有的數據。

2.3 DELETE FROM 語句

DELETE FROM table_name
WHERE condition;
  • 用于刪除表中的行。

3. 數據管理

3.1 CREATE TABLE 語句

CREATE TABLE table_name (column1 datatype,column2 datatype,...
);
  • 用于創建新的表格。

3.2 ALTER TABLE 語句

ALTER TABLE table_name
ADD column_name datatype;
  • 用于向表中添加新的列。

3.3 DROP TABLE 語句

DROP TABLE table_name;
  • 用于刪除整個表。

常用關聯查詢表

1. 內連接(INNER JOIN)

內連接是最常用的連接方式,它會返回兩個表中滿足連接條件的行。語法如下:

SELECT columns
FROM table1
INNER JOIN table2 ON table1.column = table2.column;
  • 示例:
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

2. 左連接(LEFT JOIN)

左連接會返回左表中所有行,以及右表中滿足連接條件的行。如果右表中沒有匹配的行,則返回 NULL 值。語法如下:

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;
  • 示例:
SELECT customers.customer_name, orders.order_id
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id;

3. 右連接(RIGHT JOIN)

右連接與左連接相反,會返回右表中所有行,以及左表中滿足連接條件的行。如果左表中沒有匹配的行,則返回 NULL 值。語法如下:

SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;
  • 示例:
SELECT orders.order_id, customers.customer_name
FROM orders
RIGHT JOIN customers ON orders.customer_id = customers.customer_id;

4. 全連接(FULL JOIN)

全連接會返回兩個表中所有的行,無論是否滿足連接條件。如果某個表中沒有匹配的行,則返回 NULL 值。語法如下:

SELECT columns
FROM table1
FULL JOIN table2 ON table1.column = table2.column;
  • 示例:
SELECT customers.customer_name, orders.order_id
FROM customers
FULL JOIN orders ON customers.customer_id = orders.customer_id;

多表關聯

1. 多表連接(JOIN)

多表連接用于將多個表按照指定條件進行連接,以獲取符合條件的數據。常見的連接類型包括 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN。語法如下:

SELECT columns
FROM table1
JOIN table2 ON table1.column = table2.column
JOIN table3 ON table2.column = table3.column
...
  • 示例:
SELECT orders.order_id, customers.customer_name, products.product_name
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
JOIN products ON orders.product_id = products.product_id;

2. 聯合查詢(UNION)

聯合查詢用于合并多個 SELECT 語句的結果集,并去除重復行。語法如下:

SELECT columns FROM table1
UNION
SELECT columns FROM table2
UNION
SELECT columns FROM table3
...
  • 示例:
SELECT product_name FROM products
UNION
SELECT product_name FROM archived_products;

3. 子查詢(Subquery)

子查詢是嵌套在其他查詢語句中的查詢,可以用來作為條件、篩選規則或者結果集的一部分。語法如下:

SELECT columns
FROM table
WHERE column IN (SELECT column FROM another_table WHERE condition);
  • 示例:
SELECT order_id, order_date
FROM orders
WHERE customer_id IN (SELECT customer_id FROM customers WHERE country = 'USA');

sql查詢性能優化

SQL 查詢性能優化是提高數據庫查詢速度和效率的關鍵步驟。通過優化 SQL 查詢語句、索引設計和數據庫配置,可以顯著提升系統性能和響應時間。

1. SQL 查詢語句優化

1. 使用索引

  • 在經常用于檢索數據的列上創建索引,可以加快查詢速度。
CREATE INDEX index_name ON table_name(column_name);
  1. 避免 SELECT *
  • 盡量避免使用 SELECT *,而是明確列出需要查詢的列,避免檢索不必要的數據。
  1. 使用 WHERE 子句
  • 在查詢中盡量使用 WHERE 子句進行條件過濾,減少返回結果集的大小。
  1. 使用 JOIN 條件
  • 確保 JOIN 操作中有合適的連接條件,避免出現笛卡爾積(Cartesian Product)。
  1. 避免嵌套查詢
  • 盡量避免使用嵌套查詢,可以考慮使用 JOIN 或子查詢來替代。
  1. 使用 EXISTS 替代 IN
  • 在需要檢查子查詢是否返回結果時,使用 EXISTS 關鍵字比 IN 關鍵字效率更高。
  1. 避免使用通配符在 WHERE 子句開頭
  • 避免在 WHERE 子句中使用通配符(如 %)開頭,這會導致索引失效。
  1. 使用 LIMIT 限制結果集大小
  • 在查詢中使用 LIMIT 關鍵字限制返回結果的數量,避免返回過多數據。
  1. 使用 UNION ALL 替代 UNION
  • 如果不需要去重操作,盡量使用 UNION ALL 而不是 UNION,因為 UNION 會執行去重操作,消耗額外性能。
  1. 定期優化表結構
  • 定期對數據庫表進行優化,包括刪除不必要的索引、重建索引、壓縮表等操作。

通過合理使用以上 SQL 查詢語句優化關鍵字和技巧,可以有效提升數據庫查詢性能和效率,讓查詢操作更加快速和高效。希木這些技巧對您有所幫助,如果有任何問題或需要進一步幫助,請隨時提問!

2. 索引優化

  1. 選擇合適的列進行索引
  • 需要對經常用于檢索數據的列進行索引,例如常用于 WHERE 子句、JOIN 條件和 ORDER BY 子句的列。
  1. 考慮多列索引
  • 在需要同時檢索多個列的查詢中,考慮創建多列索引,以提高聯合條件查詢的效率。
  1. 避免在頻繁更新的列上創建索引
  • 對于頻繁進行插入、刪除和更新操作的列,不宜過度創建索引,因為索引的維護會增加額外的開銷。
  1. 考慮使用覆蓋索引
  • 覆蓋索引是指索引包含了查詢需要的所有列,避免了回表查詢,可以提高查詢效率。
  1. 定期重新構建索引
  • 對于數據量變化較大的表,定期重新構建索引可以幫助優化索引的性能。
  1. 使用索引提示
  • 在某些情況下,數據庫可能無法正確選擇最優的索引,可以考慮使用索引提示來指導數據庫查詢優化器選擇合適的索引。
  1. 監視索引的使用情況
  • 通過監視數據庫索引的使用情況,可以及時發現哪些索引沒有被使用或者需要優化。
  1. 考慮部分索引
  • 對于只有部分數據需要索引的列,可以考慮創建部分索引,以減少索引的大小和維護成本。
  1. 使用索引優化工具
  • 可以使用數據庫管理工具或者專門的索引優化工具來分析索引的性能,并提出優化建議。
  1. 注意索引與性能的平衡
  • 創建過多的索引可能會增加數據庫的維護開銷,需要權衡索引對查詢性能的提升和維護成本之間的關系。

3. 數據庫統計信息

  1. 表統計信息
  • 表的大小:包括表的行數、占用的存儲空間大小等。
  • 表的平均行長度:用于估算表的存儲空間需求和查詢性能。
  • 表的更新時間:記錄表最后一次更新的時間戳,用于查詢數據的實時性。
  1. 索引統計信息
  • 索引的大小:包括索引占用的存儲空間大小。
  • 索引的選擇性:衡量索引的唯一性,選擇性越高表示重復值越少,性能越好。
  • 索引的使用頻率:記錄索引被查詢的次數,用于評估索引的實際效益。
  1. 列統計信息
  • 列的基本信息:包括列的數據類型、長度、是否允許空值等。
  • 列的數據分布:統計列中不同取值的頻率和分布情況,用于優化查詢條件。
  • 列的最大值和最小值:用于確定列的范圍和數據分布情況。
  1. 查詢執行計劃統計信息
  • 查詢執行計劃:記錄數據庫查詢的執行路徑、操作順序和訪問方法,用于優化查詢性能。
  • 查詢優化器統計信息:包括查詢優化器對索引、表和連接方式的估算成本和選擇依據。
  1. 數據庫性能監控指標
  • 數據庫連接數:記錄當前數據庫的連接數和連接池使用情況。
  • 查詢響應時間:統計數據庫查詢的響應時間,用于評估數據庫性能。
  • 緩存命中率:記錄數據庫緩存的命中率,用于評估緩存效果和優化緩存設置。

4. 查詢緩存

  1. 什么是查詢緩存?
    查詢緩存是數據庫管理系統中的一個緩存機制,用于存儲已經執行過的查詢結果,以便在接收到相同查詢請求時能夠直接返回緩存結果,而無需重新執行查詢操作。
  2. 查詢緩存如何工作?
    當一個查詢語句被執行后,數據庫會將查詢結果存儲在內存中的緩存中,同時記錄查詢語句和對應的結果。當下次有相同的查詢請求到達時,數據庫會首先檢查緩存中是否存在相同的查詢語句,如果有,則直接返回緩存結果,避免了重復執行查詢操作。
  3. 查詢緩存的優勢是什么?
  • 提高查詢性能:避免了重復執行相同查詢語句,減少了查詢響應時間。
  • 減輕系統負載:減少了數據庫服務器的計算和IO開銷,提高了系統的并發處理能力。
  1. 查詢緩存存在哪些問題?
  • 緩存命中率:如果緩存中沒有需要的查詢結果,就無法利用查詢緩存,影響性能提升效果。
  • 緩存失效:當數據庫數據發生變化時,緩存中的查詢結果可能會失效,需要及時更新緩存。
  1. 如何管理查詢緩存?
  • 合理設置緩存大小:根據系統需求和內存資源設置合適的緩存大小。
  • 定期清理緩存:避免緩存過期或者存儲無效數據,定期清理緩存可以提高效率。
  • 監控緩存命中率:監控緩存命中率可以評估緩存效果,及時調整緩存策略。

5. 查詢優化工具

  • 使用數據庫性能分析工具來監控查詢執行計劃和性能瓶頸,及時發現并解決問題。
  • 使用 Explain Plan 來查看查詢執行計劃,分析索引是否被正確使用。

6. 數據庫配置優化

  • 調整數據庫參數設置,如內存分配、并發連接數等,以提高查詢性能和系統穩定性。

7. 數據分區和分片

  • 對大型表進行數據分區或分片,可以減少查詢范圍,提高查詢性能。
  • 合理設計數據分區策略,確保數據均勻分布,避免單一分區數據過大導致性能問題。

點贊.jpg

各位看官》創作不易,點個贊!!!
諸君共勉:萬事開頭難,只愿肯放棄。

免責聲明:本文章僅用于學習參考

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712462.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712462.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712462.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋輔導之管道

藍橋輔導之管道 核心思想&#xff1a;二分 二分時間 若t時刻成立 則之后也一定成立將mid時刻時每個閥門的水的流動區間加入對組 合并區間 最終判斷是否覆蓋全管道l1 && r m; #include <iostream>#include <cstring>#include <algorithm>#define…

批量自動加好友神器!微信快速擴友秘籍!

對于一些個人或者企業來說&#xff0c;傳統的人工添加好友方式往往會出現效率低下&#xff0c;費時費力的問題。那么&#xff0c;有沒有一種快速、便捷、安全的方式來解決這個問題呢&#xff1f;答案當然是肯定的&#xff0c;那就是通過使用微信管理系統來解決這一問題。 在微…

基于java+springboot景區行李寄存管理系統設計和實現

基于javaspringboot景區行李寄存管理系統設計和實現 博主介紹&#xff1a;多年java開發經驗&#xff0c;專注Java開發、定制、遠程、文檔編寫指導等,csdn特邀作者、專注于Java技術領域 作者主頁 央順技術團隊 Java畢設項目精品實戰案例《1000套》 歡迎點贊 收藏 ?留言 文末獲取…

5GC SBA架構

協議標準&#xff1a;Directory Listing /ftp/Specs/archive/23_series/23.501/ (3gpp.org) NF描述說明NSSFNetwork Slice Selection Function網絡切片選擇&#xff0c;根據UE的切片選擇輔助信息、簽約信息等確定UE允許接入的網絡切片實例。NEF Network Exposure Function網絡開…

疾控中心的污水采樣瓶用的是什么材質

疾控中心的污水采樣瓶采用的材質是聚乙烯或聚丙烯塑料。這種材質的污水采樣瓶具有耐腐蝕、耐高壓、無毒無味、重量輕、易于攜帶等優點。此外&#xff0c;這種材質的污水采樣瓶還可以在高溫下消毒&#xff0c;不會變形或破裂。 疾控中心的污水采樣瓶通常有不同的容積和形狀&…

Harbor高可用(haproxy和keepalived)

Harbor高可用&#xff08;haproxy和keepalived&#xff09; 文章目錄 Harbor高可用&#xff08;haproxy和keepalived&#xff09;1.Harbor高可用集群部署架構1.1 主機初始化1.1.1 設置網卡名和ip地址1.1.2 設置主機名1.1.3 配置鏡像源1.1.4 關閉防火墻1.1.5 禁用SELinux1.1.6 設…

SpringBoot 自定義映射規則resultMap association一對一

介紹 例&#xff1a;學生表&#xff0c;班級表&#xff0c;希望在查詢學生的時候一起返回該學生的班級&#xff0c;而一個實體類封裝的是一個表&#xff0c;如需要多表查詢就需要自定義映射。 表結構 班級表 學生表 SQL語句 SELECT a.id,a.name,a.classes,b.id classes…

Charles抓包 - 安裝、激活、證書配置

最近剛好又遇到了抓包的需求&#xff0c;之前一直使用 Fiddler 抓包&#xff0c;這幾年一直聽大家都在用 Charles 抓包&#xff0c;正好一起了解下&#xff08;一般建議掌握一種抓包方式即可&#xff0c;都可以解決同種需求場景&#xff09; 抓包 Fiddler抓包 Charles 下載、安…

[機器視覺]halcon應用實例 多ROI模板匹配

本示例是單ROI的功能擴展示例&#xff0c;多ROI.后面有空了將出用戶自定義ROI。 比單ROI增加ROI區域的連接和合并。還有for的實例應用。步驟同單ROI一樣。不懂的可以看一下單ROI文章。[機器視覺]halcon應用實例 單ROI模板匹配-CSDN博客 有需要的可以【點贊】【關注】【收藏】…

2024年新提出的算法|LEA愛情進化算法(Love Evolution Algorithm)

Love Evolution Algorithm: a stimulus–value–role theory-inspired evolutionary algorithm for global optimization 愛情進化算法Love Evolution Algorithm&#xff0c;LEA&#xff0c;于2024年2月發表在中科院3區SCI期刊 The Journal of Supercomputing。 1、簡介 本文提…

幸運星數(爺再也不想用pow了)

解法&#xff1a; 暴力 #include <iostream> #include <vector> using namespace std; #define endl \nint main() {ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);int n;long long sum 0, a;cin >> n;for (int i 1; i < n; i) {a 1;for (in…

#python升級#CentOS 7 python升級到3.11.6

在 CentOS 7 上升級 Python 版本可能會比較復雜&#xff0c;因為 CentOS 7 默認安裝的是 Python 2.7&#xff0c;并且系統很多組件依賴于它。不過&#xff0c;可以通過以下步驟嘗試升級到 Python 3.11.6&#xff1a; 安裝必要的依賴&#xff1a; sudo yum install gcc openssl-…

洛谷P1015回文數

題目描述 若一個數&#xff08;首位不為零&#xff09;從左向右讀與從右向左讀都一樣&#xff0c;我們就將其稱之為回文數。 例如&#xff1a;給定一個十進制數 5656&#xff0c;將 5656 加 6565&#xff08;即把 5656 從右向左讀&#xff09;&#xff0c;得到 121121 是一個…

藍橋杯刷題2

1. 修建灌木 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int n scan.nextInt();for (int i 1;i < n1;i){int distance Math.max(i-1,n-i);System.out.println(distance*2);}scan.close…

軟件設計師軟考題目解析12 --每日五題

想說的話&#xff1a;要準備軟考了。0.0&#xff0c;其實我是不想考的&#xff0c;但是吧&#xff0c;由于本人已經學完所有知識了&#xff0c;只是被學校的課程給鎖在那里了&#xff0c;不然早找工作去了。尋思著反正也無聊&#xff0c;就考個證玩玩。 本人github地址&#xf…

種花

分情況&#xff1a; 第一盆k種選擇&#xff0c;之后全部k-1種選擇 每次相乘結果對1e97取模 #include <iostream> #include <vector> #include <algorithm> using namespace std; #define endl \n const int N 1e9 7;int main() {ios::sync_with_stdio(f…

微信小程序iOS禁止上下拉顯示白邊

先上圖暴露出問題 iOS端這個頁面明明正好顯示的&#xff0c;非要能下拉上拉給顯示出來點白邊。這樣不就不好看了嘛。。 想了想是不是支持頁面下拉導致的&#xff0c;加入以下代碼到json文件中。 {"enablePullDownRefresh": false,"usingComponents": {} }…

java009 - Java面向對象基礎

1、類和對象 1.1 什么是對象 萬物皆對象&#xff0c;客觀存在的事物皆為對象。 1.2 什么是面向對象 1.3 什么是類 類是對現實生活中一類具有共同屬性和行為的事物抽象。 特點&#xff1a; 類是對象的數據類型類是具有相同屬性和行為的一組對象的集合 1.4 什么是對象的屬…

project.config.json 文件內容錯誤] project.config.json: libVersion 字段需為 string, string

家人們&#xff0c;遇到了一個新的報錯 于是從網上找了各種方法&#xff0c;有說把開發者工具關閉重啟的&#xff0c;有說開發者工具下載重新下載的&#xff0c;有說開發者工具路徑安裝得在C盤的&#xff0c;均沒有效果 解決方法&#xff1a; 1、運行項目&#xff0c;在開發者…

[安洵杯 2019]easy_serialize_php1

打開題目 題目源碼&#xff1a; <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user&q…