上期給大家分享了在交互式分析中如何給表導入數據,在PostgreSQL中的標準insert語句,往期精彩傳送門:今天聊聊怎麼給表寫入數據 ,同時相關的建表操作也可以參見往期:今天來聊聊怎麼高效建表
通常來說,數據存儲需要耗費存儲資源,當查數據的時候,也會耗費計算資源,如何快速查詢到想要的結果又能省去不必要的計算資源,也是性能優化的一大挑戰。今天小編就為大家講解,如何在交互式分子中,高效使用SELECT以達到快速查詢數據又能節約資源的目的。
語法
SELECT [ALL | DISTINCT [ON (expression [, ...])]]
* | expression [[AS] output_name] [, ...]
[FROM from_item [, ...]]
[WHERE condition]
[GROUP BY grouping_element [, ...]]
[HAVING condition [, ...]]
[{UNION | INTERSECT | EXCEPT} [ALL] select]
[ORDER BY expression [ASC | DESC | USING operator] [, ...]]
[LIMIT {count | ALL}]
使用示例
1.SELECT *
直接使用SELECT語句查整個表,如示例:
select * from test;
在使用select * 時,會整個表做索引,但實際業務中,整張表的數據並不是所有的都會同時需要,因此會浪費大量的計算資源,當整個表數據量特別大時,也會耗費大量時間去查詢。
2. SELECT FROM
當要大量查詢某些欄位時,一般建議不做整張表的查詢,而是查需要的列,示例如下:
select id,name from test;
3.GROUP BY
GROUP BY 語句用於結合聚合函數,根據一個或多個列對結果集進行分組。
SELECT kind, sum(length) AS total FROM films GROUP BY kind;
說明:group by 裡面的欄位包含不能float/double這種浮點型。
4.DISTINCT/COUNT DISTINCT
在表中,可能會包含重複值,使用distinct來返回不同的值,而count distinct是用來計算非重複數據的數目。
//distinct用法
SELECT DISTINCT ON (location) location, time, report
FROM weather_reports
ORDER BY location, time DESC;
//精確uv
SELECT c1, COUNT(DISTINCT c2) FROM table GROUP BY c1
//非精確uv
SELECT c1, approx_count_distinct(c2) FROM table GROUP BY c1
5.UNION
UNION用於將兩個或者更多的 SELECT 語句的運算結果組合起來。
說明:每個 SELECT 語句必須有相同數量的選中列、相同數量的列表達式、相同的數據類型,並且它們出現的次序要一致,不過長度不一定要相同。
SELECT ID, NAME, AMOUNT, DATE
FROM CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
UNION
SELECT ID, NAME, AMOUNT, DATE
FROM CUSTOMERS
RIGHT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
6.ORDER BY
ORDER BY用於對查詢的結果進行排序。可用於根據指定的列對結果集進行排序。
說明:默認排序是升序,若要使用降序,需要使用DESC關鍵字
SELECT Company, OrderNumber FROM Orders ORDER BY Company;
//降序排列
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC;
7.WHERE
where用於按照指定條件來選擇數據。
SELECT * FROM Persons WHERE FirstName='Bush';
使用優化
1.只需要查某些列,將select全表替換成select指定欄位
select * from table
替換成:
select id,name from table;
2.對於查詢較大的數據,加一些過濾條件以及限定條件
select id,value from table where id=123 limit 1000;
3.對於數據量較大的表,查詢主要以等值查詢為主要查詢場景時,建議可以創建或者將原表修改為Hash Clustering表,利用CLUSTERED欄位加速該欄位的filter效率。
4.對於數據量不大但查詢時長明顯較大時,需要判斷是否存在數據傾斜問題:可以通過ANALYZE EXPLAIN方式查看執行計劃,獲取診斷信息。
作者:May-交互式分析