後端產品經理筆記之查詢數據庫

MySQL NoSQL 產品經理 MongoDB PHP 人人都是產品經理 2018-12-04

本文從實際工作中梳理出7個方面的總結:數據庫、常用sql語句、數據傳輸、文檔語法、邏輯規則、交互方案、擴展技能。

後端產品經理筆記之查詢數據庫

隨著數據量增大,業務擴展,服務器吃緊,加上開發跑路比較頻繁,常常導致後端網站很‘爛’,這可能是你一段時間內不得不面對的常態。

這就決定了後端產品思維更要接近技術,繞不開百萬級數據、業務邏輯、數據規則。在工作中無法像前端產品那樣做甩手掌櫃:反正我要的告訴你了,怎麼實現我不管。而事實上往往還要產品給開發一兩個建議方案,並告訴他要避免哪些坑,儘管這些都是前任的鍋。

一、數據庫

1. 理解數據庫

1、前端看到的內容,如果不是代碼寫死的,那麼就是從數據庫讀取的(本地緩存的數據也算)。

2、早期比較流行的數據庫模型有三種:層次式數據庫、網絡式數據庫和關係型數據庫。現今最常用的即關係型數據庫和非關係型數據庫。

3、關係型數據庫:MYsql為典範,以二位報表的形式展示,因此MYSQL和PHP的組合是比較完美(報表多)。

4、比MYsql強大的關係型數據庫還有ORACLE。比如1000W條數據以上級別的數據,一般用的比較多的是ORACLE。

5、MYsql每張表只能有一個主鍵。但開發會創建多個字段的索引。目的是為了提高查詢速度。至少提升上百倍查詢速度。

6、非關係型數據庫(NoSQL):

NoSQL是作為傳統關係型數據庫的一個有效補充,處理對存儲要求高,且併發處理較高的場合。

主要是數據庫Mongodb。數據是散漫的,以鍵值對的形式存儲。

7、分佈式賬本數據庫:區塊連的數據存儲方式。也有叫時間軸數據庫的。略知即可。

8、圖片的存儲比較特別:

一種是:直接把圖片轉換成二進制文件存儲在數據庫中。適合存儲量少且重要的圖片信息。

另一種是:存儲圖片的路徑到數據庫,用的時候直接調用路徑給image等圖像控件即可。適合存儲量大但不是太重要的圖片。

第二種方法常用,簡單,實用。

2. 實戰注意

1、建表的時候一般會增加冗餘字段,比如unique_code,用於存儲備用字段來去重。

2、建表的時候可以增加預留字段:當數據量大的時候很難再加新字段,所以預估到數據增張較快的,一定要預留幾個字段空位。便於日後數據表擴展。

3、當一個表無法再加字段的時候可以增加擴展表 ,後綴_ext ,與原表通過id關聯起來。

4、新增表字段:要考慮,到數據初始化比如歷史數據全部為空或刷為某一個值。

5、統一規範表名前綴,比如可以定義t_前綴標示類型, f_ 前綴表示從其他系統獲取的。

二、SQL語句

1. 基本函數

1、產品經理一般不去建表、改表,所以create table <表名> 、alter table <表名>、drop table <表名>知道就可以。

產品更多是查詢、統計,或者寫出更新/插入/刪除語句讓開發執行。

2、 select語句是使用最多的,配合函數:

count:統計記錄數

avg:計算字段值的平均值

sum:計算字段值的總和

max:查詢字段的最大值

min:查詢字段的最大值

比如:select count(id) from p_product;

3、排序:order by 字段 desc/ASC

select * from finance_order order by update_time desc limit 3;

4、不包含某個字符

select * from table where ziduan not in(select ziduan from table where name = ‘C’)

5、包含某個字符

select * from table where 列名 like ‘a%’ 利用模糊查詢

6、查詢表p_product中的第10、11、12、13行數據

select * from product limit 4 offset 9;

或 select * from product limit 9,4;

7、in 括號內為或的關係

select name from product where goods in (‘103702505′,’103702805’) and (shelf_time > ‘2014-09-15 16:53:21’ or title like ‘_tylish%’);

8、去重搜索:

SELECT distinct(goods) FROM

9、 GROUP BY 語句進行組合。

SELECT Customer,SUM(OrderPrice) FROM Orders GROUP BY Custome

10、前10條記錄

select top 10 * form table1 where

11、連表查詢用join

Inner Join最常見,叫做內聯接,可以縮寫成Join,找的是兩張表共同擁有的字段。

Left Join叫做左聯接,以左表(join符號前的那張表)為主,返回所有的行。如果右表有共同字段,則一併返回,如果沒有,則為空。

A Full Join B = A Left Join B + A Right Join B – A Inner Join B

還有其他連表方式既然用網絡的圖片:

後端產品經理筆記之查詢數據庫

12、查表 f_oms中字段order_number值相同的且數據量大於1個的

select order_number,count(*) from f_oms group by order_number having count(*)>1

13、從 “Persons” 表中選取居住的城市不以 “A” 或 “L” 或 “N” 開頭的人:

我們可以使用下面的 SELECT 語句:

SELECT * FROM Persons WHERE City LIKE ‘[!ALN]%’

2. 技巧

1、and優先級高於or,一般這種混合的句子建議用使關係清晰。

比如A>0 OR B<0 and c=0,相當於A>0 OR( B<0 and c=0)

2、點擊‘美化SQL’按鈕,可以將語句斷層使層次清晰。比如where goods_sn in(‘A’,’B’,’C),美化後會變成:

where   goods_sn in (

'A',

'B',

'C

)

就可以用截取工具截取ABC,還原到excel表格的樣式。

3、為防止數據導出因位數過長而使字符串變為科學計數法,導出的文件格式選擇XLS格式的文檔。

4、數據備份。

選中數據,右鍵點擊複製為insert/update,可以直接將篩選的字段備份為更新或插入語句,一旦需要還原的時候可以直接執行這幾個語句。

後端產品經理筆記之查詢數據庫

5、提升查詢速度,SQL語句快於MYSQL自帶的篩選選項,並且自帶的只顯示前一千條。所以優先使用語句查詢。

6、多個獨立的查詢語句之間可以用;隔開,同時執行,會分別輸出。

後端產品經理筆記之查詢數據庫

7、導出的表頭換成漢字註釋的方式:

SELECT a.ds_sn as ‘編碼’,a.pdt_name as ‘名稱’ FROM p_pro

8、is和=有時是不同的,比如寫作is null ,而不寫=null

比<>!=規範。有時候不兼容。

本文由 @環滁皆山也 原創發佈於人人都是產品經理。未經許可,禁止轉載。

題圖來自 Unsplash,基於 CC0 協議

相關推薦

推薦中...