主頁 > 資料庫 > 2022-8-17 mysql 第三天

2022-8-17 mysql 第三天

2022-08-19 08:40:06 資料庫

DQL查詢語言

子查詢

按照結果集的行列數不同,子查詢可以分為以下幾類:

  • 標量子查詢:結果集只有一行一列(單行子查詢)
  • 列子查詢:結果集有一列多行
  • 行子查詢:結果集有一行多列
  • 表子查詢:結果集多行多列
-- 查詢比小虎年齡大的所有學生
-- 標量子查詢
SELECT
	* 
FROM
	student 
WHERE
	age > ( SELECT age FROM student WHERE NAME = '小虎' );
-- 查詢有一門學科分數大于90分的學生資訊
-- 列子查詢
SELECT
	* 
FROM
	student 
WHERE
	id IN (
	SELECT
		s_id 
	FROM
		scores 
WHERE
	score > 90);
-- 查詢男生且年齡最大的學生
-- 行子查詢
SELECT
	* 
FROM
	student 
WHERE
	age = (
	SELECT
		max( age ) 
	FROM
		student 
	GROUP BY
		gender 
	HAVING
	gender = '男' 
	)
	
-- 優化
SELECT
	* 
FROM
	student 
WHERE
	( age, gender ) = (
	SELECT
		max( age ),
		gender 
	FROM
		student 
	GROUP BY
		gender 
	HAVING
	gender = '男' 
	)

總結:

  • where型子查詢,如果是where 列 = (內層sql),則內層的sql回傳的必須是單行單列,單個值,
  • where型子查詢,如果是where (列1,列2) = (內層sql),內層的sql回傳的必須是單列,可以是多行,
-- 取排名數學成績前五的學生,正序排列
SELECT
	* 
FROM
	(
	SELECT
		s.*,
		sc.score score,
		c.NAME 科目 
	FROM
		student s
		LEFT JOIN scores sc ON s.id = sc.s_id
		LEFT JOIN course c ON c.id = sc.c_id 
	WHERE
		c.NAME = '數學' 
	ORDER BY
		score DESC 
		LIMIT 5 
	) t 
WHERE
	t.gender = '男';

經驗分享:

  1. 分析需求
  2. 拆步驟
  3. 分步寫sql
  4. 整合拼裝sql
-- 查詢每個老師的代課數
SELECT t.id, t.NAME,( SELECT count(*) FROM course c WHERE c.id = t.id ) AS 代課的數量 
FROM
	teacher t;
----------------------------------------------------------------------------
SELECT
	t.id,
	t.NAME,
	count(*) '代課的數量' 
FROM
	teacher t
	LEFT JOIN course c ON c.t_id = t.id 
GROUP BY
	t.id,
	t.NAME;
-- exists
SELECT
	* 
FROM
	teacher t 
WHERE
	EXISTS ( SELECT * FROM course c WHERE c.t_id = t.id );
----------------------------------------------------------------------------SELECT
	t.*,
	c.`name` 
FROM
	teacher t
	INNER JOIN course c ON t.id = c.t_id;	

總結:如果一個需求可以不用子查詢,盡量不使用,

sql可讀性太低,

需求

-- 3.查詢每個同學的最高成績和科目名稱****
SELECT
	t.id,
	t.NAME,
	c.id,
	c.NAME,
	r.score 
FROM
	(
	SELECT
		s.id,
		s.NAME,(
		SELECT
			max( score ) 
		FROM
			scores r 
		WHERE
			r.s_id = s.id 
		) score 
	FROM
		student s 
	) t
	LEFT JOIN scores r ON r.s_id = t.id 
	AND r.score = t.score
	LEFT JOIN course c ON r.c_id = c.id;
-- 5.查詢每個課程的最高分的學生資訊*****
SELECT
	* 
FROM
	student s 
WHERE
	id IN (
	SELECT DISTINCT
		r.s_id 
	FROM
		(
		SELECT
			c.id,
			c.NAME,
			max( score ) score 
		FROM
			student s
			LEFT JOIN scores r ON r.s_id = s.id
			LEFT JOIN course c ON c.id = r.c_id 
		GROUP BY
			c.id,
			c.NAME 
		) t
		LEFT JOIN scores r ON r.c_id = t.id 
	AND t.score = r.score 
	)
-- 6.查詢名字中含有'張'或'李'字的學生的資訊和各科成績,
SELECT
	s.id,
	s.NAME sname,
	sc.score,
	c.NAME 
FROM
	student s
	LEFT JOIN scores sc ON s.id = sc.s_id
	LEFT JOIN course c ON sc.c_id = c.id 
WHERE
	s.NAME LIKE '%張%' 
	OR s.NAME LIKE '%李%';
-- 7.查詢平均成績及格的同學的資訊,(子查詢)
SELECT
	* 
FROM
	student 
WHERE
	id IN (
	SELECT
		sc.s_id 
	FROM
		scores sc 
	GROUP BY
		sc.s_id 
	HAVING
	avg( sc.score ) >= 70 
	)
-- 8.將學生按照總分數進行排名,(從高到低)
SELECT
	s.id,
	s.NAME,
	sum( sc.score ) score 
FROM
	student s
	LEFT JOIN scores sc ON s.id = sc.s_id 
GROUP BY
	s.id,
	s.NAME 
ORDER BY
	score DESC,
	s.id ASC;
-- 9.查詢數學成績的最高分、最低分、平均分,
SELECT
	c.NAME,
	max( sc.score ),
	min( sc.score ),
	avg( sc.score ) 
FROM
	course c
	LEFT JOIN scores sc ON c.id = sc.c_id 
WHERE
	c.NAME = '數學';
-- 10.將各科目按照平均分排序,
SELECT
	c.id,
	c.NAME,
	avg( sc.score ) score 
FROM
	course c
	LEFT JOIN scores sc ON c.id = sc.c_id 
GROUP BY
	c.id,
	c.NAME 
ORDER BY
	score DESC;
-- 11.查詢老師的資訊和他所帶的科目的平均分
SELECT
	t.id,
	t.NAME,
	c.id cid,
	c.NAME cname,
	avg( r.score ) 
FROM
	teacher t
	LEFT JOIN course c ON t.id = c.t_id
	LEFT JOIN scores r ON r.c_id = c.id 
GROUP BY
	t.id,
	t.NAME,
	c.id,
	c.NAME;
-- 12.查詢被"Tom"和"Jerry"教的課程的最高分和最低分
SELECT
	t.id,
	t.NAME,
	c.id cid,
	c.NAME cname,
	max( r.score ),
	min( r.score ) 
FROM
	teacher t
	LEFT JOIN course c ON t.id = c.t_id
	LEFT JOIN scores r ON r.c_id = c.id 
GROUP BY
	t.id,
	t.NAME,
	c.id,
	c.NAME 
HAVING
	t.NAME IN ( 'Tom', 'Jerry' );
-- 13.查詢每個學生的最好成績的科目名稱(子查詢)
SELECT
	t.id,
	t.sname,
	r.c_id,
	c.NAME,
	t.score 
FROM
	(
	SELECT
		s.id,
		s.NAME sname,
		max( r.score ) score 
	FROM
		student s
		LEFT JOIN scores r ON r.s_id = s.id 
	GROUP BY
		s.id,
		s.NAME 
	) t
	LEFT JOIN scores r ON r.s_id = t.id 
	AND r.score = t.score
	LEFT JOIN course c ON r.c_id = c.id;
-- 14.查詢所有學生的課程及分數
SELECT
	s.id,
	s.NAME,
	c.id,
	c.NAME,
	r.score 
FROM
	student s
	LEFT JOIN scores r ON s.id = r.s_id
	LEFT JOIN course c ON c.id = r.c_id;
-- 15.查詢課程編號為1且課程成績在60分以上的學生的學號和姓名(子查詢)
SELECT
	* 
FROM
	student s 
WHERE
	s.id IN (
	SELECT
		r.s_id 
	FROM
		scores r 
	WHERE
	r.c_id = 1 
	AND r.score > 60)
--------------------------------------------------------
SELECT
	s.*,
	r.* 
FROM
	student s
	LEFT JOIN scores r ON s.id = r.s_id 
WHERE
	r.c_id = 1 
	AND r.score > 60
-- 16. 查詢平均成績大于等于70的所有學生學號、姓名和平均成績
SELECT
	s.id,
	s.NAME,
	t.score 
FROM
	student s
	LEFT JOIN ( SELECT r.s_id, avg( r.score ) score FROM scores r GROUP BY r.s_id ) t ON s.id = t.s_id 
WHERE
	t.score >= 70;
-- 17.查詢有不及格課程的學生資訊
SELECT
	* 
FROM
	student s 
WHERE
	id IN ( SELECT r.s_id FROM scores r GROUP BY r.s_id HAVING min( r.score ) < 60 );
-- 18.查詢每門課程有成績的學生人數
SELECT
	c.id,
	c.NAME,
	t.number 
FROM
	course c
	LEFT JOIN ( SELECT r.c_id, count(*) number FROM scores r GROUP BY r.c_id ) t ON c.id = t.c_id;
----------------------------------------------------
SELECT
	c.id,
	c.NAME,
	count(*) 
FROM
	course c
	LEFT JOIN scores r ON c.id = r.c_id 
GROUP BY
	c.id,
	c.NAME;
-- 19.查詢每門課程的平均成績,結果按照平均成績降序排列,如果平均成績相同,再按照課程編號升序排列
SELECT
	c.id,
	c.NAME,
	avg( score ) score 
FROM
	course c
	LEFT JOIN scores r ON c.id = r.c_id 
GROUP BY
	c.id,
	c.NAME 
ORDER BY
	score DESC,
	c.id ASC;
-- 20.查詢平均成績大于60分的同學的學生編號和學生姓名和平均成績
SELECT
	s.id,
	s.NAME sname,
	avg( r.score ) score 
FROM
	student s
	LEFT JOIN scores r ON r.s_id = s.id
	LEFT JOIN course c ON c.id = r.c_id 
GROUP BY
	s.id,
	s.NAME 
HAVING
	score > 65;
-- 21.查詢有且僅有一門課程成績在80分以上的學生資訊
SELECT
	* 
FROM
	student 
WHERE
	id IN ( SELECT r.s_id FROM scores r WHERE r.score > 80 GROUP BY r.s_id HAVING COUNT(*) = 1 );
----------------------------------------------------------------------------
SELECT
	s.id,
	s.NAME,
	s.gender 
FROM
	student s
	LEFT JOIN scores r ON s.id = r.s_id 
WHERE
	r.score > 80 
GROUP BY
	s.id,
	s.NAME,
	s.gender 
HAVING
	count(*) = 1
-- 22.查詢出只有三門課程的學生的學號和姓名
SELECT
	* 
FROM
	student s 
WHERE
	id IN ( SELECT r.s_id FROM scores r GROUP BY r.s_id HAVING count(*) = 3 );
----------------------------------------------------------------------------
SELECT
	s.id,
	s.NAME,
	s.gender 
FROM
	student s
	LEFT JOIN scores r ON s.id = r.s_id 
GROUP BY
	s.id,
	s.NAME,
	s.gender 
HAVING
	count(*) = 3
-- 23.查詢有不及格課程的課程資訊
SELECT
	* 
FROM
	course c 
WHERE
	id IN (
	SELECT
		r.c_id 
	FROM
		scores r 
	GROUP BY
		r.c_id 
	HAVING
	min( r.score ) < 60 
	)
----------------------------------------------------------------------------
SELECT
	c.id,
	c.NAME 
FROM
	course c
	LEFT JOIN scores sc ON c.id = sc.c_id 
GROUP BY
	sc.c_id,
	c.NAME 
HAVING
	min( sc.score ) < 60;
-- 24.查詢至少選擇4門課程的學生資訊
SELECT
	* 
FROM
	student 
WHERE
	id IN (
	SELECT
		r.s_id 
	FROM
		scores r 
	GROUP BY
		r.s_id 
	HAVING
	count(*) >= 4 
	)
----------------------------------------------------------------------------
SELECT
	s.id,
	s.NAME 
FROM
	student s
	LEFT JOIN scores r ON s.id = r.s_id 
GROUP BY
	s.id,
	s.NAME 
HAVING
	count(*) >= 4;
-- 25.查詢沒有選全所有課程的同學的資訊
SELECT
	* 
FROM
	student 
WHERE
	id IN (
	SELECT
		r.s_id 
	FROM
		scores r 
	GROUP BY
		r.s_id 
	HAVING
	count(*) != 5
	)
-- 26.查詢選全所有課程的同學的資訊
SELECT
	s.id,
	s.NAME,
	count(*) number 
FROM
	student s
	LEFT JOIN scores r ON s.id = r.s_id 
GROUP BY
	s.id,
	s.NAME 
HAVING
	number = ( SELECT count(*) FROM course );
-- 27.查詢各學生都選了多少門課
SELECT
	s.id,
	s.NAME,
	count(*) number 
FROM
	student s
	LEFT JOIN scores r ON s.id = r.s_id 
GROUP BY
	s.id,
	s.NAME
-- 28.查詢課程名稱為"java",且分數低于60分的學生姓名和分數
SELECT
	s.id,
	s.NAME,
	r.score 
FROM
	student s
	LEFT JOIN scores r ON s.id = r.s_id
	LEFT JOIN course c ON r.c_id = c.id 
WHERE
	c.NAME = 'java' 
	AND r.score < 60;
-- 29.查詢學過"Tony"老師授課的同學的資訊
SELECT
	s.id,
	s.NAME 
FROM
	student s
	LEFT JOIN scores r ON r.s_id = s.id
	LEFT JOIN course c ON c.id = r.c_id
	LEFT JOIN teacher t ON t.id = c.t_id 
WHERE
	t.NAME = 'Tom';
-- 30.查詢沒學過"Tony"老師授課的學生資訊
SELECT
	* 
FROM
	student 
WHERE
	id NOT IN (
	SELECT DISTINCT
		s.id 
	FROM
		student s
		LEFT JOIN scores r ON r.s_id = s.id
		LEFT JOIN course c ON c.id = r.c_id
		LEFT JOIN teacher t ON t.id = c.t_id 
	WHERE
	t.NAME = 'Tom' 
	)

日期格式

格式 描述
%a 縮寫的星期名
%b 縮寫月名
%c 月,數值
%D 帶有英文前綴的月中的天
%d 月的天,數值(00-31)
%e 月的天,數值(0-31)
%f 微秒
%H 小時(00-23)
%h 小時(01-12)
%I 小時(01-12)
%i 分鐘,數值(00-59)
%j 年的天(001-366)
%k 小時(0-23)
%l 小時(1-12)
%M 月名
%m 月,數值(00-12)
%p AM或PM
%r 時間,12-小時 (hh:mm:ss AM或PM)
%S 秒(00-59)
%s 秒(0-59)
%T 時間,24-小時(hh:mm:ss)
%U 周(00-53)星期日是一周的第一天
%u 周(00-53)星期一是一周的第一天
%W 星期名
%Y 年,2022
%y 年,22

MySQL常用函式

聚合函式

  • count:計數,count(*)≈count(1)>count(主鍵)
    • count(*):MySQL對count(*)底層優化,count(0),
    • count(1)
    • count(主鍵)
    • count(欄位)
  • min:最小值
  • max:最大值
  • sum:求和
  • avg:平均值

數值型函式

主要是對數值型進行處理,

  • ceiling(x):向上取整
  • floor(x):向下取整
  • round(x):四舍五入
  • truncate(x,y):回傳數字x截斷為y位小數的結果
  • PI:圓周率,π
  • rand:回傳0到1的亂數
  • abs:絕對值
-- 絕對值
select ABS(-4) 4的絕對值,ABS(-1.1);
-- 向下取整,向上取整,四舍五入
select CEILING(4.1),FLOOR(1.1),ROUND(-4.4)
-- 取余
select MOD(60,11);
-- 亂數
select RAND(),RAND(),RAND()
-- 截斷
select TRUNCATE(2.33999999,2);

字串型函式

對字串進行處理,

  • length(s):字串的長度
  • concat(s1,s2,.....sn):合并字串
  • lower(str):將字母轉成小寫
  • upper(str):將字母轉成大寫
  • left(str,x):回傳字串str的左邊的x個字符
  • right(str,x):回傳字串str右邊的x個字符
  • trim:去掉左右兩邊的空格
  • replace:替換
  • substring:截取
  • reverse:反轉
select LEFT('abcdefg',2);
select RIGHT('abcdefg',2);
select REVERSE('hijklmn');
select REPLACE('abcdefg','abc','x');

日期和時間函式

date,time,datetime,timestamp,year,

獲取時間和日期

  • 【curdate】和【current_date】,回傳當前的系統日期,
  • 【curtime】和【current_time】,回傳當前的系統時間,
  • 【now】和【sysdate】,回傳當前的系統時間和日期,
select CURRENT_DATE();
select CURTIME();
select now();

時間戳和日期轉換函式

  • 【UNIX_TIMESTAMP】獲取unix時間戳函式
  • 【FROM_UNIXTIME】將時間戳轉換為時間格式
select UNIX_TIMESTAMP();
select FROM_UNIXTIME(1660785720);

根據日期獲取年月日的數值

select MONTH(SYSDATE());
select MONTHNAME(SYSDATE());
select DAYNAME(SYSDATE());
select DAYOFWEEK(SYSDATE());
select WEEK(SYSDATE());
select DAYOFMONTH(SYSDATE());
select YEAR(SYSDATE());

時間日期的計算

-- 日期加法
select DATE_ADD(SYSDATE(),INTERVAL 70 DAY);
-- 日期減法
select DATE_SUB(SYSDATE(),INTERVAL 10 DAY);
-- 時間間隔
select DATEDIFF('2023-01-01',SYSDATE());
-- 日期格式化
select DATE_FORMAT(SYSDATE(),'%W %M %D %Y');

加密函式

-- 把傳入的引數的字串按照md5演算法進行加密,得到一個32位的16進制的字串
select MD5('123456');

md5演算法是不可逆的,

流程控制函式

可以進行條件判斷,用來實作SQL陳述句的邏輯,

  • if(test,t,f):如果test是真,則回傳t,否則回傳f
  • ifnull(arg1,arg2):如果arg1不是空,回傳arg1,否則回傳arg2
  • nullif(arg1,arg2):如果arg1=arg2回傳null,否則回傳arg1
select IF(2 > 1,'a','b');
select IFNULL(sal,0);
select NULLIF(age,0);

對一系列的值進行判斷:

-- 輸出學生的各科的成績,以及評級,60以下D,60-70是C,71-80是B,80以上是A
SELECT
	*,
CASE
		
		WHEN score < 60 THEN 'D' WHEN score >= 60 
		AND score < 70 THEN 'C' WHEN score >= 70 
			AND score < 80 THEN 'B' WHEN score >= 80 THEN
				'A' 
			END AS '評級' 
	FROM
	mystudent;
-- 行轉列
SELECT
	user_name,
	max( CASE course WHEN '數學' THEN score ELSE 0 END ) '數學',
	max( CASE course WHEN '語文' THEN score ELSE 0 END ) '語文',
	max( CASE course WHEN '英語' THEN score ELSE 0 END ) '英語' 
FROM
	mystudent 
GROUP BY
	user_name

資料庫設計

三范式

  • 第一范式:要求有主鍵,并且要求每一個欄位的原子性不能再分,
  • 第二范式:要求所有的非主鍵欄位完全依賴主鍵,不能產生部分依賴
  • 第三范式:所有非主鍵欄位和主鍵欄位之間不能產生傳遞依賴,

第一范式

不符合第一范式表結構:

id name 聯系方式
1001 aaa [[email protected] , 13314569878](mailto:[email protected] , 13314569878)
1002 bbb [[email protected] , 13245678945](mailto:[email protected] , 13245678945)
1003 ccc [[email protected] , 15000456987](mailto:[email protected] , 15000456987)

符合第一范式的表結構:

id name 郵箱 手機號
1001 aaa [email protected] 12321321321
1002 bbb [email protected] 32132654654
1003 ccc [email protected] 45654654654

必須有主鍵,這是資料庫設計的基本要求,一般情況下我們采用數值型或定長字串,列不能再分,比如:聯系方式,

關于第一范式,保證每一行的資料是唯一,每個表必須有主鍵,

第二范式

建立在第一范式的基礎上,要求所有非主鍵欄位完全依賴于主鍵,不能產生部分依賴,

學號 性別 姓名 課程編號 課程名稱 教室 成績
1001 a 2001 java 301 89
1002 b 2002 mysql 302 90
1003 c 2003 html 303 91
1004 d 2004 python 304 52
1005 e 2005 c++ 305 67
1006 f 2006 c# 306 84

解決方案:

學生表:學號是主鍵

學號 性別 姓名
1001 a
1002 b
1003 c
1004 d
1005 e
1006 f

課程表:課程編號是主鍵

課程編號 課程名稱 教室
2001 java 301
2002 mysql 302
2003 html 303
2004 python 304
2005 c++ 305
2006 c# 306

成績表:學號和課程編號為聯合主鍵

學號 課程編號 成績
1001 2001 89
1002 2002 90
1003 2003 91
1004 2004 52
1005 2005 67
1006 2006 84

第三范式

建立在第二范式基礎上,非主鍵欄位不能傳遞依賴于主鍵欄位,

不滿足第三范式:

學號 姓名 課程編號 課程名稱
1001 a 2001 java
1002 b 2002 mysql
1003 c 2003 html
1004 d 2004 python
1005 e 2005 c++
1006 f 2006 c#

解決方案:

學生表:學號是主鍵

學號 姓名 課程編號
1001 a 2001
1002 b 2002
1003 c 2003
1004 d 2004
1005 e 2005
1006 f 2006

課程表:課程編號是主鍵

課程編號 課程名稱
2001 java
2002 mysql
2003 html
2004 python
2005 c++
2006 c#

常見的表關系

一對一

學生資訊表分為基本資訊表和資訊資訊表,

  • 分為兩張表,共享主鍵,
  • 分兩張表,用外鍵連接,

一對多

兩張表,外鍵在多的一方,

  • 分兩張表存盤,在多的一方加外鍵
  • 這個外鍵欄位參考是一的一方的主鍵

多對多

  • 分三張表存盤,在學生表存盤學生資訊,在課程表存盤課程資訊,
  • 在成績表中存盤學生和課程的對應關系,

索引視圖,存盤程序,觸發器,函式

本文來自博客園,作者:阿薩德菩提子,轉載請注明原文鏈接:https://www.cnblogs.com/ychptz/p/16600328.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/502267.html

標籤:MySQL

上一篇:在windows上用docker desktop安裝StoneDB

下一篇:在windows上用docker desktop安裝StoneDB

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more