一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

幾個(gè)寫SQL時(shí)常見的“壞毛病”及優(yōu)化技巧

程序員cxuan ? 來源:程序員cxuan ? 2023-01-17 09:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


今天給大家分享幾個(gè)寫 SQL 時(shí)常見的“壞毛病”及優(yōu)化技巧。

1、LIMIT 語句

分頁查詢是最常用的場(chǎng)景之一,但也通常也是最容易出問題的地方。比如對(duì)于下面簡(jiǎn)單的語句,一般 DBA 想到的辦法是在 type、 name、 create_time 字段上加組合索引。這樣條件排序都能有效的利用到索引,性能迅速提升。

SELECT*
FROMoperation
WHEREtype='SQLStats'
ANDname='SlowLog'
ORDERBYcreate_time
LIMIT1000,10;

好吧,可能90%以上的 DBA 解決該問題就到此為止。但當(dāng) LIMIT 子句變成 “LIMIT 1000000,10” 時(shí),程序員仍然會(huì)抱怨:我只取10條記錄為什么還是慢?

要知道數(shù)據(jù)庫也并不知道第1000000條記錄從什么地方開始,即使有索引也需要從頭計(jì)算一次。出現(xiàn)這種性能問題,多數(shù)情形下是程序員偷懶了。

在前端數(shù)據(jù)瀏覽翻頁,或者大數(shù)據(jù)分批導(dǎo)出等場(chǎng)景下,是可以將上一頁的最大值當(dāng)成參數(shù)作為查詢條件的。SQL 重新設(shè)計(jì)如下:

SELECT*
FROMoperation
WHEREtype='SQLStats'
ANDname='SlowLog'
ANDcreate_time>'2017-03-161400'
ORDERBYcreate_timelimit10;

2、隱式轉(zhuǎn)換

SQL語句中查詢變量和字段定義類型不匹配是另一個(gè)常見的錯(cuò)誤。比如下面的語句:

mysql>explainextendedSELECT*
>FROMmy_balanceb
>WHEREb.bpn=14000000123
>ANDb.isverifiedISNULL;
mysql>showwarnings;
|Warning|1739|Cannotuserefaccessonindex'bpn'duetotypeorcollationconversiononfield'bpn'

其中字段 bpn 的定義為 varchar(20),MySQL 的策略是將字符串轉(zhuǎn)換為數(shù)字之后再比較。函數(shù)作用于表字段,索引失效。

上述情況可能是應(yīng)用程序框架自動(dòng)填入的參數(shù),而不是程序員的原意?,F(xiàn)在應(yīng)用框架很多很繁雜,使用方便的同時(shí)也小心它可能給自己挖坑。

3、關(guān)聯(lián)更新、刪除

雖然 MySQL5.6 引入了物化特性,但需要特別注意它目前僅僅針對(duì)查詢語句的優(yōu)化。對(duì)于更新或刪除需要手工重寫成 JOIN。

比如下面 UPDATE 語句,MySQL 實(shí)際執(zhí)行的是循環(huán)/嵌套子查詢(DEPENDENT SUBQUERY),其執(zhí)行時(shí)間可想而知。

UPDATEoperationo
SETstatus='applying'
WHEREo.idIN(SELECTid
FROM(SELECTo.id,
o.status
FROMoperationo
WHEREo.group=123
ANDo.statusNOTIN('done')
ORDERBYo.parent,
o.id
LIMIT1)t);

執(zhí)行計(jì)劃:

+----+--------------------+-------+-------+---------------+---------+---------+-------+------+-----------------------------------------------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+--------------------+-------+-------+---------------+---------+---------+-------+------+-----------------------------------------------------+
|1|PRIMARY|o|index||PRIMARY|8||24|Usingwhere;Usingtemporary|
|2|DEPENDENTSUBQUERY||||||||ImpossibleWHEREnoticedafterreadingconsttables|
|3|DERIVED|o|ref|idx_2,idx_5|idx_5|8|const|1|Usingwhere;Usingfilesort|
+----+--------------------+-------+-------+---------------+---------+---------+-------+------+-----------------------------------------------------+

重寫為 JOIN 之后,子查詢的選擇模式從 DEPENDENT SUBQUERY 變成 DERIVED,執(zhí)行速度大大加快,從7秒降低到2毫秒。

UPDATEoperationo
JOIN(SELECTo.id,
o.status
FROMoperationo
WHEREo.group=123
ANDo.statusNOTIN('done')
ORDERBYo.parent,
o.id
LIMIT1)t
ONo.id=t.id
SETstatus='applying'

執(zhí)行計(jì)劃簡(jiǎn)化為:

+----+-------------+-------+------+---------------+-------+---------+-------+------+-----------------------------------------------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+-------+------+---------------+-------+---------+-------+------+-----------------------------------------------------+
|1|PRIMARY||||||||ImpossibleWHEREnoticedafterreadingconsttables|
|2|DERIVED|o|ref|idx_2,idx_5|idx_5|8|const|1|Usingwhere;Usingfilesort|
+----+-------------+-------+------+---------------+-------+---------+-------+------+-----------------------------------------------------+

4、混合排序

MySQL 不能利用索引進(jìn)行混合排序。但在某些場(chǎng)景,還是有機(jī)會(huì)使用特殊方法提升性能的。

SELECT* 
FROMmy_ordero
INNERJOINmy_appraiseaONa.orderid=o.id
ORDERBYa.is_replyASC,
a.appraise_timeDESC
LIMIT0,20

執(zhí)行計(jì)劃顯示為全表掃描:

+----+-------------+-------+--------+-------------+---------+---------+---------------+---------+-+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra
+----+-------------+-------+--------+-------------+---------+---------+---------------+---------+-+
|1|SIMPLE|a|ALL|idx_orderid|NULL|NULL|NULL|1967647|Usingfilesort|
|1|SIMPLE|o|eq_ref|PRIMARY|PRIMARY|122|a.orderid|1|NULL|
+----+-------------+-------+--------+---------+---------+---------+-----------------+---------+-+

由于 is_reply 只有0和1兩種狀態(tài),我們按照下面的方法重寫后,執(zhí)行時(shí)間從1.58秒降低到2毫秒。

SELECT*
FROM((SELECT*
FROMmy_ordero
INNERJOINmy_appraisea
ONa.orderid=o.id
ANDis_reply=0
ORDERBYappraise_timeDESC
LIMIT0,20)
UNIONALL
(SELECT*
FROMmy_ordero
INNERJOINmy_appraisea
ONa.orderid=o.id
ANDis_reply=1
ORDERBYappraise_timeDESC
LIMIT0,20))t
ORDERBYis_replyASC,
appraisetimeDESC
LIMIT20;

5、EXISTS語句

MySQL 對(duì)待 EXISTS 子句時(shí),仍然采用嵌套子查詢的執(zhí)行方式。如下面的 SQL 語句:

SELECT*
FROMmy_neighborn
LEFTJOINmy_neighbor_applysra
ONn.id=sra.neighbor_id
ANDsra.user_id='xxx'
WHEREn.topic_status'xxx')
ANDn.topic_type<>5

執(zhí)行計(jì)劃為:

+----+--------------------+-------+------+-----+------------------------------------------+---------+-------+---------+-----+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+--------------------+-------+------+-----+------------------------------------------+---------+-------+---------+-----+
|1|PRIMARY|n|ALL||NULL|NULL|NULL|1086041|Usingwhere|
|1|PRIMARY|sra|ref||idx_user_id|123|const|1|Usingwhere|
|2|DEPENDENTSUBQUERY|m|ref||idx_message_info|122|const|1|Usingindexcondition;Usingwhere|
+----+--------------------+-------+------+-----+------------------------------------------+---------+-------+---------+-----+

去掉 exists 更改為 join,能夠避免嵌套子查詢,將執(zhí)行時(shí)間從1.93秒降低為1毫秒。

SELECT*
FROMmy_neighborn
INNERJOINmessage_infom
ONn.id=m.neighbor_id
ANDm.inuser='xxx'
LEFTJOINmy_neighbor_applysra
ONn.id=sra.neighbor_id
ANDsra.user_id='xxx'
WHEREn.topic_status5

新的執(zhí)行計(jì)劃:

+----+-------------+-------+--------+-----+------------------------------------------+---------+-----+------+-----+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+-------+--------+-----+------------------------------------------+---------+-----+------+-----+
|1|SIMPLE|m|ref||idx_message_info|122|const|1|Usingindexcondition|
|1|SIMPLE|n|eq_ref||PRIMARY|122|ighbor_id|1|Usingwhere|
|1|SIMPLE|sra|ref||idx_user_id|123|const|1|Usingwhere|
+----+-------------+-------+--------+-----+------------------------------------------+---------+-----+------+-----+

6、條件下推

外部查詢條件不能夠下推到復(fù)雜的視圖或子查詢的情況有:

  • 聚合子查詢;
  • 含有 LIMIT 的子查詢;
  • UNION 或 UNION ALL 子查詢;
  • 輸出字段中的子查詢;

如下面的語句,從執(zhí)行計(jì)劃可以看出其條件作用于聚合子查詢之后

SELECT*
FROM(SELECTtarget,
Count(*)
FROMoperation
GROUPBYtarget)t
WHEREtarget='rm-xxxx'
+----+-------------+------------+-------+---------------+-------------+---------+-------+------+-------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+------------+-------+---------------+-------------+---------+-------+------+-------------+
|1|PRIMARY||ref|||514|const|2|Usingwhere|
|2|DERIVED|operation|index|idx_4|idx_4|519|NULL|20|Usingindex|
+----+-------------+------------+-------+---------------+-------------+---------+-------+------+-------------+

確定從語義上查詢條件可以直接下推后,重寫如下:

SELECTtarget,
Count(*)
FROMoperation
WHEREtarget='rm-xxxx'
GROUPBYtarget

執(zhí)行計(jì)劃變?yōu)椋?/span>

+----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+
|1|SIMPLE|operation|ref|idx_4|idx_4|514|const|1|Usingwhere;Usingindex|
+----+-------------+-----------+------+---------------+-------+---------+-------+------+--------------------+

7、提前縮小范圍

先上初始 SQL 語句:

SELECT*
FROMmy_ordero
LEFTJOINmy_userinfou
ONo.uid=u.uid
LEFTJOINmy_productinfop
ONo.pid=p.pid
WHERE(o.display=0)
AND(o.ostaus=1)
ORDERBYo.selltimeDESC
LIMIT0,15

該SQL語句原意是:先做一系列的左連接,然后排序取前15條記錄。從執(zhí)行計(jì)劃也可以看出,最后一步估算排序記錄數(shù)為90萬,時(shí)間消耗為12秒。

+----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+
|1|SIMPLE|o|ALL|NULL|NULL|NULL|NULL|909119|Usingwhere;Usingtemporary;Usingfilesort|
|1|SIMPLE|u|eq_ref|PRIMARY|PRIMARY|4|o.uid|1|NULL|
|1|SIMPLE|p|ALL|PRIMARY|NULL|NULL|NULL|6|Usingwhere;Usingjoinbuffer(BlockNestedLoop)|
+----+-------------+-------+--------+---------------+---------+---------+-----------------+--------+----------------------------------------------------+

由于最后 WHERE 條件以及排序均針對(duì)最左主表,因此可以先對(duì) my_order 排序提前縮小數(shù)據(jù)量再做左連接。SQL 重寫后如下,執(zhí)行時(shí)間縮小為1毫秒左右。

SELECT*
FROM(
SELECT*
FROMmy_ordero
WHERE(o.display=0)
AND(o.ostaus=1)
ORDERBYo.selltimeDESC
LIMIT0,15
)o
LEFTJOINmy_userinfou
ONo.uid=u.uid
LEFTJOINmy_productinfop
ONo.pid=p.pid
ORDERBYo.selltimeDESC
limit0,15

再檢查執(zhí)行計(jì)劃:子查詢物化后(select_type=DERIVED)參與 JOIN。雖然估算行掃描仍然為90萬,但是利用了索引以及 LIMIT 子句后,實(shí)際執(zhí)行時(shí)間變得很小。

+----+-------------+------------+--------+---------------+---------+---------+-------+--------+----------------------------------------------------+
|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra|
+----+-------------+------------+--------+---------------+---------+---------+-------+--------+----------------------------------------------------+
|1|PRIMARY||ALL|NULL|NULL|NULL|NULL|15|Usingtemporary;Usingfilesort|
|1|PRIMARY|u|eq_ref|PRIMARY|PRIMARY|4|o.uid|1|NULL|
|1|PRIMARY|p|ALL|PRIMARY|NULL|NULL|NULL|6|Usingwhere;Usingjoinbuffer(BlockNestedLoop)|
|2|DERIVED|o|index|NULL|idx_1|5|NULL|909112|Usingwhere|
+----+-------------+------------+--------+---------------+---------+---------+-------+--------+----------------------------------------------------+

8、中間結(jié)果集下推

再來看下面這個(gè)已經(jīng)初步優(yōu)化過的例子(左連接中的主表優(yōu)先作用查詢條件):

SELECTa.*,
c.allocated
FROM(
SELECTresourceid
FROMmy_distributed
WHEREisdelete=0
ANDcusmanagercode='1234567'
ORDERBYsalecodelimit20)a
LEFTJOIN
(
SELECTresourcesid,sum(ifnull(allocation,0)*12345)allocated
FROMmy_resources
GROUPBYresourcesid)c
ONa.resourceid=c.resourcesid

那么該語句還存在其它問題嗎?不難看出子查詢 c 是全表聚合查詢,在表數(shù)量特別大的情況下會(huì)導(dǎo)致整個(gè)語句的性能下降。

其實(shí)對(duì)于子查詢 c,左連接最后結(jié)果集只關(guān)心能和主表 resourceid 能匹配的數(shù)據(jù)。因此我們可以重寫語句如下,執(zhí)行時(shí)間從原來的2秒下降到2毫秒。

SELECTa.*,
c.allocated
FROM(
SELECTresourceid
FROMmy_distributed
WHEREisdelete=0
ANDcusmanagercode='1234567'
ORDERBYsalecodelimit20)a
LEFTJOIN
(
SELECTresourcesid,sum(ifnull(allocation,0)*12345)allocated
FROMmy_resourcesr,
(
SELECTresourceid
FROMmy_distributed
WHEREisdelete=0
ANDcusmanagercode='1234567'
ORDERBYsalecodelimit20)a
WHEREr.resourcesid=a.resourcesid
GROUPBYresourcesid)c
ONa.resourceid=c.resourcesid

但是子查詢 a 在我們的SQL語句中出現(xiàn)了多次。這種寫法不僅存在額外的開銷,還使得整個(gè)語句顯的繁雜。使用 WITH 語句再次重寫:

WITHaAS
(
SELECTresourceid
FROMmy_distributed
WHEREisdelete=0
ANDcusmanagercode='1234567'
ORDERBYsalecodelimit20)
SELECTa.*,
c.allocated
FROMa
LEFTJOIN
(
SELECTresourcesid,sum(ifnull(allocation,0)*12345)allocated
FROMmy_resourcesr,
a
WHEREr.resourcesid=a.resourcesid
GROUPBYresourcesid)c
ONa.resourceid=c.resourcesid

總結(jié)

數(shù)據(jù)庫編譯器產(chǎn)生執(zhí)行計(jì)劃,決定著SQL的實(shí)際執(zhí)行方式。但是編譯器只是盡力服務(wù),所有數(shù)據(jù)庫的編譯器都不是盡善盡美的。

上述提到的多數(shù)場(chǎng)景,在其它數(shù)據(jù)庫中也存在性能問題。了解數(shù)據(jù)庫編譯器的特性,才能避規(guī)其短處,寫出高性能的SQL語句。

程序員在設(shè)計(jì)數(shù)據(jù)模型以及編寫SQL語句時(shí),要把算法的思想或意識(shí)帶進(jìn)來。

編寫復(fù)雜SQL語句要養(yǎng)成使用 WITH 語句的習(xí)慣。簡(jiǎn)潔且思路清晰的SQL語句也能減小數(shù)據(jù)庫的負(fù)擔(dān) 。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    783

    瀏覽量

    45158
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3927

    瀏覽量

    66241
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1662

    瀏覽量

    50228

原文標(biāo)題:這樣寫 SQL,差點(diǎn)人沒了

文章出處:【微信號(hào):cxuangoodjob,微信公眾號(hào):程序員cxuan】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    達(dá)夢(mèng)數(shù)據(jù)庫常用管理SQL命令詳解

    達(dá)夢(mèng)數(shù)據(jù)庫常用管理SQL命令詳解
    的頭像 發(fā)表于 06-17 15:12 ?593次閱讀
    達(dá)夢(mèng)數(shù)據(jù)庫常用管理<b class='flag-5'>SQL</b>命令詳解

    如何一眼定位SQL的代碼來源:一款SQL染色標(biāo)記的簡(jiǎn)易MyBatis插件

    作者:京東物流 郭忠強(qiáng) 導(dǎo)語 本文分析了后端研發(fā)和運(yùn)維在日常工作中所面臨的線上SQL定位排查痛點(diǎn),基于姓名貼的靈感,設(shè)計(jì)和開發(fā)了一款SQL染色標(biāo)記的MyBatis插件。該插件輕量高效,對(duì)業(yè)務(wù)代碼無
    的頭像 發(fā)表于 03-05 11:36 ?418次閱讀
    如何一眼定位<b class='flag-5'>SQL</b>的代碼來源:一款<b class='flag-5'>SQL</b>染色標(biāo)記的簡(jiǎn)易MyBatis插件

    Devart: dbForge Compare Bundle for SQL Server—比較SQL數(shù)據(jù)庫最簡(jiǎn)單、最準(zhǔn)確的方法

    ? dbForge Compare Bundle For SQL Server:包含兩個(gè)工具,可幫助您節(jié)省用于手動(dòng)數(shù)據(jù)庫比較的 70% 的時(shí)間 dbForge數(shù)據(jù)比較 幫助檢測(cè)和分析實(shí)時(shí)SQL數(shù)據(jù)庫
    的頭像 發(fā)表于 01-17 11:35 ?562次閱讀

    dbForge Studio For SQL Server:用于有效開發(fā)的最佳SQL Server集成開發(fā)環(huán)境

    dbForge Studio For SQL Server:用于有效開發(fā)的最佳SQL Server集成開發(fā)環(huán)境 SQL編碼助手 SQL代碼分析 查詢分析器 可視化查詢生成器 數(shù)據(jù)和模式
    的頭像 發(fā)表于 01-16 10:36 ?743次閱讀

    Devart::dbForge SQL Complete讓生產(chǎn)力上一個(gè)臺(tái)階

    SQL編碼助手,適用于SSMS 和VS 該工具提供上下文感知的代碼補(bǔ)全,使SQL開發(fā)人員和數(shù)據(jù)庫管理員能夠更快地編寫代碼。 SQL Complet包含許多實(shí)用的功能,這些功能是專門為提高開發(fā)團(tuán)隊(duì)
    的頭像 發(fā)表于 01-14 11:09 ?624次閱讀
    Devart::dbForge <b class='flag-5'>SQL</b> Complete讓生產(chǎn)力上一個(gè)臺(tái)階

    通過Skyvia Connect SQL終端節(jié)點(diǎn)訪問任何數(shù)據(jù)

    通過 Skyvia Connect SQL 終端節(jié)點(diǎn)訪問任何數(shù)據(jù) ? 通過 Skyvia Connect SQL 終端節(jié)點(diǎn)訪問任何數(shù)據(jù)ADO.NET 數(shù)據(jù)網(wǎng)關(guān) 使用 Skyvia Connect
    的頭像 發(fā)表于 01-02 09:31 ?368次閱讀
    通過Skyvia Connect <b class='flag-5'>SQL</b>終端節(jié)點(diǎn)訪問任何數(shù)據(jù)

    淺談SQL優(yōu)化小技巧

    作者:京東零售 王軍 回顧:MySQL的執(zhí)行過程回顧 MySQL的執(zhí)行過程,幫助 介紹 如何進(jìn)行sql優(yōu)化。 (1)客戶端發(fā)送一條查詢語句到服務(wù)器; (2)服務(wù)器先查詢緩存,如果命中緩存,則立即返回
    的頭像 發(fā)表于 12-25 09:59 ?864次閱讀

    SSM框架的性能優(yōu)化技巧 SSM框架中RESTful API的實(shí)現(xiàn)

    緩存操作。 優(yōu)化SQL查詢 : SQL查詢是數(shù)據(jù)庫操作中的瓶頸之一。 使用索引來加速查詢,避免全表掃描,盡量使用索引掃描。
    的頭像 發(fā)表于 12-17 09:10 ?791次閱讀

    SQL錯(cuò)誤代碼及解決方案

    SQL數(shù)據(jù)庫開發(fā)和管理中,常見的錯(cuò)誤代碼及其解決方案可以歸納如下: 一、語法錯(cuò)誤(Syntax Errors) 錯(cuò)誤代碼 :無特定代碼,但通常會(huì)在錯(cuò)誤消息中明確指出是語法錯(cuò)誤。 原因 :SQL語句
    的頭像 發(fā)表于 11-19 10:21 ?6545次閱讀

    常用SQL函數(shù)及其用法

    SQL(Structured Query Language)是一種用于管理和操作關(guān)系數(shù)據(jù)庫的編程語言。SQL 提供了豐富的函數(shù)庫,用于數(shù)據(jù)檢索、數(shù)據(jù)更新、數(shù)據(jù)刪除以及數(shù)據(jù)聚合等操作。以下是一些常用
    的頭像 發(fā)表于 11-19 10:18 ?1447次閱讀

    SQL與NoSQL的區(qū)別

    在信息技術(shù)領(lǐng)域,數(shù)據(jù)庫是存儲(chǔ)和管理數(shù)據(jù)的核心組件。隨著互聯(lián)網(wǎng)的發(fā)展和大數(shù)據(jù)時(shí)代的到來,對(duì)數(shù)據(jù)庫的需求也在不斷變化。SQL和NoSQL作為兩種主流的數(shù)據(jù)庫管理系統(tǒng),各自有著獨(dú)特的優(yōu)勢(shì)和應(yīng)用場(chǎng)
    的頭像 發(fā)表于 11-19 10:15 ?611次閱讀

    MySQL性能優(yōu)化淺析及線上案例

    手段則會(huì)對(duì)用戶的使用體驗(yàn)造成影響,嚴(yán)重的則會(huì)直接導(dǎo)致訂單、金額直接受損,因而就需要時(shí)刻關(guān)注數(shù)據(jù)庫的性能問題。 2、 性能優(yōu)化幾個(gè)常見措施 數(shù)據(jù)庫性能優(yōu)化
    的頭像 發(fā)表于 10-22 15:17 ?1020次閱讀
    MySQL性能<b class='flag-5'>優(yōu)化</b>淺析及線上案例

    大數(shù)據(jù)從業(yè)者必知必會(huì)的Hive SQL調(diào)優(yōu)技巧

    不盡人意。本文針對(duì)Hive SQL的性能優(yōu)化進(jìn)行深入研究,提出了一系列可行的調(diào)優(yōu)方案,并給出了相應(yīng)的優(yōu)化案例和優(yōu)化前后的SQL代碼。通過合理
    的頭像 發(fā)表于 09-24 13:30 ?701次閱讀

    QPS提升10倍的sql優(yōu)化

    本次慢sql優(yōu)化是大促準(zhǔn)備時(shí)的一個(gè)優(yōu)化,優(yōu)化4c16g單實(shí)例mysql支持QPS從437到4610,今天發(fā)文時(shí)618大促已經(jīng)順利結(jié)束,該mysql庫和應(yīng)用在整個(gè)大促期間運(yùn)行也非常穩(wěn)定。
    的頭像 發(fā)表于 08-21 11:12 ?616次閱讀
    QPS提升10倍的<b class='flag-5'>sql</b><b class='flag-5'>優(yōu)化</b>

    IP 地址在 SQL 注入攻擊中的作用及防范策略

    數(shù)據(jù)庫在各個(gè)領(lǐng)域的逐步應(yīng)用,其安全性也備受關(guān)注。SQL 注入攻擊作為一種常見的數(shù)據(jù)庫攻擊手段,給網(wǎng)絡(luò)安全帶來了巨大威脅。今天我們來聊一聊SQL 注入攻擊的基本知識(shí)。 SQL 注入攻擊的
    的頭像 發(fā)表于 08-05 17:36 ?642次閱讀