国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【mysql】SQL優(yōu)化15種方法

這篇具有很好參考價(jià)值的文章主要介紹了【mysql】SQL優(yōu)化15種方法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

為什么進(jìn)行SQL優(yōu)化?

????其實(shí),開發(fā)項(xiàng)目上線初期,由于業(yè)務(wù)數(shù)據(jù)量相對(duì)較少,一些SQL的執(zhí)行效率對(duì)程序運(yùn)行效率的影響不太明顯,而開發(fā)和運(yùn)維人員也無法判斷SQL對(duì)程序的運(yùn)行效率有多大,故很少針對(duì)SQL進(jìn)行專門的優(yōu)化,
????但是,隨著時(shí)間的積累,業(yè)務(wù)數(shù)據(jù)量的增多,SQL的執(zhí)行效率對(duì)程序的運(yùn)行效率的影響逐漸增大,此時(shí)對(duì)SQL的優(yōu)化就很有必要。

1.避免使用select *

在實(shí)際業(yè)務(wù)場(chǎng)景中,可能我們真正需要使用的只有其中一兩列。查了很多數(shù)據(jù),但是不用,白白浪費(fèi)了數(shù)據(jù)庫(kù)資源,比如:內(nèi)存或者cpu。

此外,多查出來的數(shù)據(jù),通過網(wǎng)絡(luò)IO傳輸?shù)倪^程中,也會(huì)增加數(shù)據(jù)傳輸?shù)臅r(shí)間。

還有一個(gè)最重要的問題是:select *不會(huì)走覆蓋索引,會(huì)出現(xiàn)大量的回表操作,而從導(dǎo)致查詢sql的性能很低。


2.用union all代替union

我們都知道sql語句使用union關(guān)鍵字后,可以獲取排重后的數(shù)據(jù)。

而如果使用union all關(guān)鍵字,可以獲取所有數(shù)據(jù),包含重復(fù)的數(shù)據(jù)。

(select * from user where id=1) 
union 
(select * from user where id=2);

排重的過程需要遍歷、排序和比較,它更耗時(shí),更消耗cpu資源。

所以如果能用union all的時(shí)候,盡量不用union。

除非是有些特殊的場(chǎng)景,比如union all之后,結(jié)果集中出現(xiàn)了重復(fù)數(shù)據(jù),而業(yè)務(wù)場(chǎng)景中是不允許產(chǎn)生重復(fù)數(shù)據(jù)的,這時(shí)可以使用union


3.小表驅(qū)動(dòng)大表

小表驅(qū)動(dòng)大表,也就是說用小表的數(shù)據(jù)集驅(qū)動(dòng)大表的數(shù)據(jù)集。

假如有order和user兩張表,其中order表有10000條數(shù)據(jù),而user表有100條數(shù)據(jù)。

這時(shí)如果想查一下,所有有效的用戶下過的訂單列表。

可以使用in關(guān)鍵字實(shí)現(xiàn):

select * from order
where user_id in (select id from user where status=1)

也可以使用exists關(guān)鍵字實(shí)現(xiàn):

select * from order
where exists (select 1 from user where order.user_id = user.id and status=1)

這種業(yè)務(wù)場(chǎng)景,使用in關(guān)鍵字去實(shí)現(xiàn)業(yè)務(wù)需求,更加合適。

為什么呢?

因?yàn)槿绻鹲ql語句中包含了in關(guān)鍵字,則它會(huì)優(yōu)先執(zhí)行in里面的子查詢語句,然后再執(zhí)行in外面的語句。如果in里面的數(shù)據(jù)量很少,作為條件查詢速度更快。

而如果sql語句中包含了exists關(guān)鍵字,它優(yōu)先執(zhí)行exists左邊的語句(即主查詢語句)。然后把它作為條件,去跟右邊的語句匹配。如果匹配上,則可以查詢出數(shù)據(jù)。如果匹配不上,數(shù)據(jù)就被過濾掉了。

這個(gè)需求中,order表有10000條數(shù)據(jù),而user表有100條數(shù)據(jù)。order表是大表,user表是小表。如果order表在左邊,則用in關(guān)鍵字性能更好。

總結(jié)一下:
in 適用于左邊大表,右邊小表。
exists 適用于左邊小表,右邊大表。
不管是用in,還是exists關(guān)鍵字,其核心思想都是用小表驅(qū)動(dòng)大表。


4.批量操作

如果你有一批數(shù)據(jù)經(jīng)過業(yè)務(wù)處理之后,需要插入數(shù)據(jù),該怎么辦?

反例:

for(Order order: list){
   orderMapper.insert(order):
}

在循環(huán)中逐條插入數(shù)據(jù)。

insert into order(id,code,user_id) 
values(123,'001',100);

該操作需要多次請(qǐng)求數(shù)據(jù)庫(kù),才能完成這批數(shù)據(jù)的插入。

但眾所周知,我們?cè)诖a中,每次遠(yuǎn)程請(qǐng)求數(shù)據(jù)庫(kù),是會(huì)消耗一定性能的。而如果我們的代碼需要請(qǐng)求多次數(shù)據(jù)庫(kù),才能完成本次業(yè)務(wù)功能,勢(shì)必會(huì)消耗更多的性能。

那么如何優(yōu)化呢?

正例:

orderMapper.insertBatch(list);

提供一個(gè)批量插入數(shù)據(jù)的方法。

insert into order(id,code,user_id) 
values(123,'001',100),(124,'002',100),(125,'003',101);

這樣只需要遠(yuǎn)程請(qǐng)求一次數(shù)據(jù)庫(kù),sql性能會(huì)得到提升,數(shù)據(jù)量越多,提升越大。

但需要注意的是,不建議一次批量操作太多的數(shù)據(jù),如果數(shù)據(jù)太多數(shù)據(jù)庫(kù)響應(yīng)也會(huì)很慢。批量操作需要把握一個(gè)度,建議每批數(shù)據(jù)盡量控制在500以內(nèi)。如果數(shù)據(jù)多于500,則分多批次處理。


5.多用limit

有時(shí)候,我們需要查詢某些數(shù)據(jù)中的第一條,比如:查詢某個(gè)用戶下的第一個(gè)訂單,想看看他第一次的首單時(shí)間。

反例:

select id, create_date 
 from order 
where user_id=123 
order by create_date asc;

根據(jù)用戶id查詢訂單,按下單時(shí)間排序,先查出該用戶所有的訂單數(shù)據(jù),得到一個(gè)訂單集合。然后在代碼中,獲取第一個(gè)元素的數(shù)據(jù),即首單的數(shù)據(jù),就能獲取首單時(shí)間。

List<Order> list = orderMapper.getOrderList();
Order order = list.get(0);

雖說這種做法在功能上沒有問題,但它的效率非常不高,需要先查詢出所有的數(shù)據(jù),有點(diǎn)浪費(fèi)資源。

那么,如何優(yōu)化呢?

正例:

select id, create_date 
 from order 
where user_id=123 
order by create_date asc 
limit 1;

使用limit 1,只返回該用戶下單時(shí)間最小的那一條數(shù)據(jù)即可。

此外,在刪除或者修改數(shù)據(jù)時(shí),為了防止誤操作,導(dǎo)致刪除或修改了不相干的數(shù)據(jù),也可以在sql語句最后加上limit。

例如:

update order set status=0,edit_time=now(3) 
where id>=100 and id<200 limit 100;

這樣即使誤操作,比如把id搞錯(cuò)了,也不會(huì)對(duì)太多的數(shù)據(jù)造成影響。

SQL查找是否"存在",別再count了!
根據(jù)某一條件從數(shù)據(jù)庫(kù)表中查詢 『有』與『沒有』,只有兩種狀態(tài),那為什么在寫SQL的時(shí)候,還要SELECT count(*) 呢?

無論是剛?cè)氲赖某绦騿T新星,還是精湛沙場(chǎng)多年的程序員老白,都是一如既往的count

反例:目前多數(shù)人的寫法

多次REVIEW代碼時(shí),發(fā)現(xiàn)如現(xiàn)現(xiàn)象:

業(yè)務(wù)代碼中,需要根據(jù)一個(gè)或多個(gè)條件,查詢是否存在記錄,不關(guān)心有多少條記錄。普遍的SQL及代碼寫法如下

SQL寫法:

SELECT count(*) FROM table WHERE a = 1 AND b = 2

Java寫法:

int nums = xxDao.countXxxxByXxx(params);
if ( nums > 0 ) {
  //當(dāng)存在時(shí),執(zhí)行這里的代碼
} else {
  //當(dāng)不存在時(shí),執(zhí)行這里的代碼
}

是不是感覺很OK,沒有什么問題

優(yōu)化方案
推薦寫法如下:

SQL寫法:

SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1

Java寫法:

Integer exist = xxDao.existXxxxByXxx(params);
if ( exist != NULL ) {
  //當(dāng)存在時(shí),執(zhí)行這里的代碼
} else {
  //當(dāng)不存在時(shí),執(zhí)行這里的代碼
}

SQL不再使用count,而是改用LIMIT 1,讓數(shù)據(jù)庫(kù)查詢時(shí)遇到一條就返回,不要再繼續(xù)查找還有多少條了

業(yè)務(wù)代碼中直接判斷是否非空即可

總結(jié)
根據(jù)查詢條件查出來的條數(shù)越多,性能提升的越明顯,在某些情況下,還可以減少聯(lián)合索引的創(chuàng)建。


6.in中值太多

對(duì)于批量查詢接口,我們通常會(huì)使用in關(guān)鍵字過濾出數(shù)據(jù)。比如:想通過指定的一些id,批量查詢出用戶信息。

sql語句如下:

select id,name from category
where id in (1,2,3...100000000);

如果我們不做任何限制,該查詢語句一次性可能會(huì)查詢出非常多的數(shù)據(jù),很容易導(dǎo)致接口超時(shí)。

這時(shí)該怎么辦呢?

select id,name from category
where id in (1,2,3...100)
limit 500;

可以在sql中對(duì)數(shù)據(jù)用limit做限制。

不過我們更多的是要在業(yè)務(wù)代碼中加限制,偽代碼如下:

public List<Category> getCategory(List<Long> ids) {
   if(CollectionUtils.isEmpty(ids)) {
      return null;
   }
   if(ids.size() > 500) {
      throw new BusinessException("一次最多允許查詢500條記錄")
   }
   return mapper.getCategoryList(ids);
}

還有一個(gè)方案就是:如果ids超過500條記錄,可以分批用多線程去查詢數(shù)據(jù)。每批只查500條記錄,最后把查詢到的數(shù)據(jù)匯總到一起返回。

不過這只是一個(gè)臨時(shí)方案,不適合于ids實(shí)在太多的場(chǎng)景。因?yàn)閕ds太多,即使能快速查出數(shù)據(jù),但如果返回的數(shù)據(jù)量太大了,網(wǎng)絡(luò)傳輸也是非常消耗性能的,接口性能始終好不到哪里去。


7.增量查詢

有時(shí)候,我們需要通過遠(yuǎn)程接口查詢數(shù)據(jù),然后同步到另外一個(gè)數(shù)據(jù)庫(kù)。

反例:

select * from user;

如果直接獲取所有的數(shù)據(jù),然后同步過去。這樣雖說非常方便,但是帶來了一個(gè)非常大的問題,就是如果數(shù)據(jù)很多的話,查詢性能會(huì)非常差。

這時(shí)該怎么辦呢?

正例:

select * from user 
where id>#{lastId} and create_time >= #{lastCreateTime} 
limit 100;

按id和時(shí)間升序,每次只同步一批數(shù)據(jù),這一批數(shù)據(jù)只有100條記錄。每次同步完成之后,保存這100條數(shù)據(jù)中最大的id和時(shí)間,給同步下一批數(shù)據(jù)的時(shí)候用。

通過這種增量查詢的方式,能夠提升單次查詢的效率。


8.高效的分頁(yè)

有時(shí)候,列表頁(yè)在查詢數(shù)據(jù)時(shí),為了避免一次性返回過多的數(shù)據(jù)影響接口性能,我們一般會(huì)對(duì)查詢接口做分頁(yè)處理。

在mysql中分頁(yè)一般用的limit關(guān)鍵字:

select id,name,age 
from user limit 10,20;

如果表中數(shù)據(jù)量少,用limit關(guān)鍵字做分頁(yè),沒啥問題。但如果表中數(shù)據(jù)量很多,用它就會(huì)出現(xiàn)性能問題。

比如現(xiàn)在分頁(yè)參數(shù)變成了:

select id,name,age 
from user limit 1000000,20;

mysql會(huì)查到1000020條數(shù)據(jù),然后丟棄前面的1000000條,只查后面的20條數(shù)據(jù),這個(gè)是非常浪費(fèi)資源的。

那么,這種海量數(shù)據(jù)該怎么分頁(yè)呢?

優(yōu)化sql:

select id,name,age 
from user where id > 1000000 limit 20;

先找到上次分頁(yè)最大的id,然后利用id上的索引查詢。不過該方案,要求id是連續(xù)的,并且有序的。

還能使用between優(yōu)化分頁(yè)。

select id,name,age 
from user where id between 1000000 and 1000020;

需要注意的是between要在唯一索引上分頁(yè),不然會(huì)出現(xiàn)每頁(yè)大小不一致的問題。


9.用連接查詢代替子查詢

mysql中如果需要從兩張以上的表中查詢出數(shù)據(jù)的話,一般有兩種實(shí)現(xiàn)方式:子查詢 和 連接查詢。

子查詢的例子如下:

select * from order
where user_id in (select id from user where status=1)

子查詢語句可以通過in關(guān)鍵字實(shí)現(xiàn),一個(gè)查詢語句的條件落在另一個(gè)select語句的查詢結(jié)果中。程序先運(yùn)行在嵌套在最內(nèi)層的語句,再運(yùn)行外層的語句。

子查詢語句的優(yōu)點(diǎn)是簡(jiǎn)單,結(jié)構(gòu)化,如果涉及的表數(shù)量不多的話。

但缺點(diǎn)是mysql執(zhí)行子查詢時(shí),需要?jiǎng)?chuàng)建臨時(shí)表,查詢完畢后,需要再刪除這些臨時(shí)表,有一些額外的性能消耗。

這時(shí)可以改成連接查詢。具體例子如下:

select o.* from order o
inner join user u on o.user_id = u.id
where u.status=1

10.join的表不宜過多

根據(jù)阿里巴巴開發(fā)者手冊(cè)的規(guī)定,join表的數(shù)量不應(yīng)該超過3個(gè)

反例:

select a.name,b.name.c.name,d.name
from a 
inner join b on a.id = b.a_id
inner join c on c.b_id = b.id
inner join d on d.c_id = c.id
inner join e on e.d_id = d.id
inner join f on f.e_id = e.id
inner join g on g.f_id = f.id

如果join太多,mysql在選擇索引的時(shí)候會(huì)非常復(fù)雜,很容易選錯(cuò)索引。

并且如果沒有命中中,nested loop join 就是分別從兩個(gè)表讀一行數(shù)據(jù)進(jìn)行兩兩對(duì)比,復(fù)雜度是 n^2。

所以我們應(yīng)該盡量控制join表的數(shù)量。

正例:

select a.name,b.name.c.name,a.d_name 
from a 
inner join b on a.id = b.a_id
inner join c on c.b_id = b.id

如果實(shí)現(xiàn)業(yè)務(wù)場(chǎng)景中需要查詢出另外幾張表中的數(shù)據(jù),可以在a、b、c表中冗余專門的字段,比如:在表a中冗余d_name字段,保存需要查詢出的數(shù)據(jù)。

不過我之前也見過有些ERP系統(tǒng),并發(fā)量不大,但業(yè)務(wù)比較復(fù)雜,需要join十幾張表才能查詢出數(shù)據(jù)。

所以join表的數(shù)量要根據(jù)系統(tǒng)的實(shí)際情況決定,不能一概而論,盡量越少越好。


11.join時(shí)要注意

我們?cè)谏婕暗蕉鄰埍砺?lián)合查詢的時(shí)候,一般會(huì)使用join關(guān)鍵字。

而join使用最多的是left join和inner join。

left join:求兩個(gè)表的交集外加左表剩下的數(shù)據(jù)。

inner join:求兩個(gè)表交集的數(shù)據(jù)。

使用inner join的示例如下:

select o.id,o.code,u.name 
from order o 
inner join user u on o.user_id = u.id
where u.status=1;

如果兩張表使用inner join關(guān)聯(lián),mysql會(huì)自動(dòng)選擇兩張表中的小表,去驅(qū)動(dòng)大表,所以性能上不會(huì)有太大的問題。

使用left join的示例如下:

select o.id,o.code,u.name 
from order o 
left join user u on o.user_id = u.id
where u.status=1;

如果兩張表使用left join關(guān)聯(lián),mysql會(huì)默認(rèn)用left join關(guān)鍵字左邊的表,去驅(qū)動(dòng)它右邊的表。如果左邊的表數(shù)據(jù)很多時(shí),就會(huì)出現(xiàn)性能問題。

要特別注意的是在用left join關(guān)聯(lián)查詢時(shí),左邊要用小表,右邊可以用大表。如果能用inner join的地方,盡量少用left join。


12.控制索引的數(shù)量

眾所周知,索引能夠顯著的提升查詢sql的性能,但索引數(shù)量并非越多越好

因?yàn)楸碇行略鰯?shù)據(jù)時(shí),需要同時(shí)為它創(chuàng)建索引,而索引是需要額外的存儲(chǔ)空間的,而且還會(huì)有一定的性能消耗。

阿里巴巴的開發(fā)者手冊(cè)中規(guī)定,單表的索引數(shù)量應(yīng)該盡量控制在5個(gè)以內(nèi),并且單個(gè)索引中的字段數(shù)不超過5個(gè)。

mysql使用的B+樹的結(jié)構(gòu)來保存索引的,在insert、update和delete操作時(shí),需要更新B+樹索引。如果索引過多,會(huì)消耗很多額外的性能。

那么,問題來了,如果表中的索引太多,超過了5個(gè)該怎么辦?

這個(gè)問題要辯證的看,如果你的系統(tǒng)并發(fā)量不高,表中的數(shù)據(jù)量也不多,其實(shí)超過5個(gè)也可以,只要不要超過太多就行。

但對(duì)于一些高并發(fā)的系統(tǒng),請(qǐng)務(wù)必遵守單表索引數(shù)量不要超過5的限制。

那么,高并發(fā)系統(tǒng)如何優(yōu)化索引數(shù)量?

能夠建聯(lián)合索引,就別建單個(gè)索引,可以刪除無用的單個(gè)索引。

將部分查詢功能遷移到其他類型的數(shù)據(jù)庫(kù)中,比如:Elastic Seach、HBase等,在業(yè)務(wù)表中只需要建幾個(gè)關(guān)鍵索引即可。


13.選擇合理的字段類型

char表示固定字符串類型,該類型的字段存儲(chǔ)空間的固定的,會(huì)浪費(fèi)存儲(chǔ)空間。

alter table order 
add column code char(20) NOT NULL;

varchar表示變長(zhǎng)字符串類型,該類型的字段存儲(chǔ)空間會(huì)根據(jù)實(shí)際數(shù)據(jù)的長(zhǎng)度調(diào)整,不會(huì)浪費(fèi)存儲(chǔ)空間。

alter table order 
add column code varchar(20) NOT NULL;

如果是長(zhǎng)度固定的字段,比如用戶手機(jī)號(hào),一般都是11位的,可以定義成char類型,長(zhǎng)度是11字節(jié)。

但如果是企業(yè)名稱字段,假如定義成char類型,就有問題了。

如果長(zhǎng)度定義得太長(zhǎng),比如定義成了200字節(jié),而實(shí)際企業(yè)長(zhǎng)度只有50字節(jié),則會(huì)浪費(fèi)150字節(jié)的存儲(chǔ)空間。

如果長(zhǎng)度定義得太短,比如定義成了50字節(jié),但實(shí)際企業(yè)名稱有100字節(jié),就會(huì)存儲(chǔ)不下,而拋出異常。

所以建議將企業(yè)名稱改成varchar類型,變長(zhǎng)字段存儲(chǔ)空間小,可以節(jié)省存儲(chǔ)空間,而且對(duì)于查詢來說,在一個(gè)相對(duì)較小的字段內(nèi)搜索效率顯然要高些。

我們?cè)谶x擇字段類型時(shí),應(yīng)該遵循這樣的原則:

  • 能用數(shù)字類型,就不用字符串,因?yàn)樽址奶幚硗葦?shù)字要慢。
  • 盡可能使用小的類型,比如:用bit存布爾值,用tinyint存枚舉值等。
  • 長(zhǎng)度固定的字符串字段,用char類型。
  • 長(zhǎng)度可變的字符串字段,用varchar類型。
  • 金額字段用decimal,避免精度丟失問題。

還有很多原則,這里就不一一列舉了。


14.提升group by的效率

我們有很多業(yè)務(wù)場(chǎng)景需要使用group by關(guān)鍵字,它主要的功能是去重和分組。

通常它會(huì)跟having一起配合使用,表示分組后再根據(jù)一定的條件過濾數(shù)據(jù)。

反例:

select user_id,user_name from order
group by user_id
having user_id <= 200;

這種寫法性能不好,它先把所有的訂單根據(jù)用戶id分組之后,再去過濾用戶id大于等于200的用戶。

分組是一個(gè)相對(duì)耗時(shí)的操作,為什么我們不先縮小數(shù)據(jù)的范圍之后,再分組呢?

正例:

select user_id,user_name from order
where user_id <= 200
group by user_id

使用where條件在分組前,就把多余的數(shù)據(jù)過濾掉了,這樣分組時(shí)效率就會(huì)更高一些。

其實(shí)這是一種思路,不僅限于group by的優(yōu)化。我們的sql語句在做一些耗時(shí)的操作之前,應(yīng)盡可能縮小數(shù)據(jù)范圍,這樣能提升sql整體的性能。


15.索引優(yōu)化

sql優(yōu)化當(dāng)中,有一個(gè)非常重要的內(nèi)容就是:索引優(yōu)化。

很多時(shí)候sql語句,走了索引,和沒有走索引,執(zhí)行效率差別很大。所以索引優(yōu)化被作為sql優(yōu)化的首選。

索引優(yōu)化的第一步是:檢查sql語句有沒有走索引。

那么,如何查看sql走了索引沒?

可以使用explain命令,查看mysql的執(zhí)行計(jì)劃。

例如:

explain select * from `order` where code='002';

結(jié)果:
mysql sql優(yōu)化,數(shù)據(jù)庫(kù),sql,mysql
通過這幾列可以判斷索引使用情況!

執(zhí)行計(jì)劃包含列的含義如下圖所示:
mysql sql優(yōu)化,數(shù)據(jù)庫(kù),sql,mysql文章來源地址http://www.zghlxwxcb.cn/news/detail-615650.html

到了這里,關(guān)于【mysql】SQL優(yōu)化15種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SQL筆記 -- 數(shù)據(jù)庫(kù)結(jié)構(gòu)優(yōu)化

    不常用的數(shù)據(jù)為冷數(shù)據(jù),反之則為熱數(shù)據(jù)。如果一個(gè)表中的數(shù)據(jù)存在明顯的使用頻率差異,那么可以將冷熱數(shù)據(jù)分離。通過這種分解可以提高表的查詢效率。對(duì)于字段很多且有些字段使用不頻繁的表,可以通過這種分解的方式來優(yōu)化數(shù)據(jù)庫(kù)的性能。 例如: 會(huì)員members表存儲(chǔ)會(huì)

    2024年01月22日
    瀏覽(98)
  • SQL Server 數(shù)據(jù)庫(kù)優(yōu)化分享

    ? ? ? ?隨著數(shù)據(jù)量和業(yè)務(wù)復(fù)雜性的增加,數(shù)據(jù)庫(kù)優(yōu)化變得越來越重要。通過對(duì) SQL Server 數(shù)據(jù)庫(kù)進(jìn)行優(yōu)化,您可以提高查詢性能、減少資源消耗,從而改善整體系統(tǒng)性能。以下是一些優(yōu)化技巧,可幫助您實(shí)現(xiàn)更高效、更可靠的數(shù)據(jù)庫(kù)操作。 使用恰當(dāng)?shù)乃饕?索引是一種提供快

    2024年02月11日
    瀏覽(89)
  • smartsofthelp 5.0 最專業(yè)的數(shù)據(jù)庫(kù)優(yōu)化工具,數(shù)據(jù)庫(kù)配置優(yōu)化,數(shù)據(jù)庫(kù)高并發(fā)優(yōu)化,SQL 語句優(yōu)化...

    smartsofthelp 5.0 最專業(yè)的數(shù)據(jù)庫(kù)優(yōu)化工具,數(shù)據(jù)庫(kù)配置優(yōu)化,數(shù)據(jù)庫(kù)高并發(fā)優(yōu)化,SQL 語句優(yōu)化...

    ? 下載地址:百度網(wǎng)盤 請(qǐng)輸入提取碼 SQL操作返回歷史記錄: 2023-08-21 20:42:08:220 ?輸入:select @@version as 版本號(hào) 2023-08-21 20:42:08:223 ?輸出:當(dāng)前數(shù)據(jù)庫(kù)實(shí)例版本號(hào):Microsoft SQL Server 2012 - 11.0.2100.60 (X64)? ?? ?Feb 10 2012 19:39:15? ?? ?Copyright (c) Microsoft Corporation ?? ?Developer Edition (

    2024年02月12日
    瀏覽(98)
  • 數(shù)據(jù)庫(kù)優(yōu)化:探索 SQL 中的索引

    數(shù)據(jù)庫(kù)優(yōu)化:探索 SQL 中的索引

    推薦:使用 NSDT場(chǎng)景編輯器 助你快速搭建可編輯的3D應(yīng)用場(chǎng)景 在一本書中搜索特定主題時(shí),我們將首先訪問索引頁(yè)面(該頁(yè)面位于該書的開頭),并找到包含我們感興趣的主題的頁(yè)碼?,F(xiàn)在,想象一下在沒有索引頁(yè)的書中找到特定主題是多么不方便。為此,我們必須搜索書中

    2024年02月14日
    瀏覽(96)
  • 【數(shù)據(jù)庫(kù)】sql優(yōu)化有哪些?從query層面和數(shù)據(jù)庫(kù)層面分析

    【數(shù)據(jù)庫(kù)】sql優(yōu)化有哪些?從query層面和數(shù)據(jù)庫(kù)層面分析

    這類型問題可以稱為:Query Optimization,從清華AI4DB的paper list中,該類問題大致可以分為: Query Rewriter Cardinality Estimation Cost Estimation Plan Optimization 從中文的角度理解那就是: 查詢重寫 基數(shù)估計(jì) 成本估計(jì) 執(zhí)行計(jì)劃優(yōu)化 可以發(fā)現(xiàn),這類型的優(yōu)化問題,大多數(shù)從sql本身,或者說從

    2024年01月17日
    瀏覽(97)
  • 一篇文章打好SQL基礎(chǔ),熟悉數(shù)據(jù)庫(kù)的基礎(chǔ)操作和方法,以及安裝MySQL軟件包和Python操作MySQL基礎(chǔ)使用

    一篇文章打好SQL基礎(chǔ),熟悉數(shù)據(jù)庫(kù)的基礎(chǔ)操作和方法,以及安裝MySQL軟件包和Python操作MySQL基礎(chǔ)使用

    SQL的全稱:Structured Query Language,結(jié)構(gòu)化查詢語言,用于 訪問和處理數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)計(jì)算機(jī)語言 。 SQL語言1974年有Boyce和Chamberlin提出的,并且首先在IBM公司研制的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)SystemR上實(shí)現(xiàn)。 經(jīng)過多年發(fā)展,SQL已經(jīng)成為數(shù)據(jù)庫(kù)領(lǐng)域同意的數(shù)據(jù)操作標(biāo)準(zhǔn)語言,可以說幾乎市面上所

    2024年02月08日
    瀏覽(104)
  • 百萬級(jí)sql server數(shù)據(jù)庫(kù)優(yōu)化案例分享

    百萬級(jí)sql server數(shù)據(jù)庫(kù)優(yōu)化案例分享

    ????????在我們的IT職業(yè)生涯中,能有一次百萬級(jí)的數(shù)據(jù)庫(kù)的優(yōu)化經(jīng)歷是很難得的,如果你遇到了恭喜你,你的職業(yè)生涯將會(huì)更加完美,如果你遇到并解決了,那么一定足夠你炫耀很多年。 ? ? ? ? 這里我將要分享一次完美的百萬級(jí)數(shù)據(jù)庫(kù)優(yōu)化經(jīng)歷,希望能給在IT行業(yè)的小

    2024年02月17日
    瀏覽(92)
  • 數(shù)據(jù)庫(kù)應(yīng)用:MySQL數(shù)據(jù)庫(kù)SQL高級(jí)語句與操作

    數(shù)據(jù)庫(kù)應(yīng)用:MySQL數(shù)據(jù)庫(kù)SQL高級(jí)語句與操作

    目錄 一、理論 1.克隆表與清空表 2.SQL高級(jí)語句 3.SQL函數(shù) 4.SQL高級(jí)操作 5.MySQL中6種常見的約束 二、實(shí)驗(yàn) ?1.克隆表與清空表 2.SQL高級(jí)語句 3.SQL函數(shù) 4.SQL高級(jí)操作 5.主鍵表和外鍵表 ?三、總結(jié) 克隆表:將數(shù)據(jù)表的數(shù)據(jù)記錄生成到新的表中。 (1)克隆表 ①?先創(chuàng)建再導(dǎo)入 ②?創(chuàng)建

    2024年02月13日
    瀏覽(102)
  • 【MySQL數(shù)據(jù)庫(kù)】MySQL 高級(jí)SQL 語句一

    【MySQL數(shù)據(jù)庫(kù)】MySQL 高級(jí)SQL 語句一

    ) % :百分號(hào)表示零個(gè)、一個(gè)或多個(gè)字符 _ :下劃線表示單個(gè)字符 ‘A_Z’:所有以 ‘A’ 起頭,另一個(gè)任何值的字符,且以 ‘Z’ 為結(jié)尾的字符串。例如,‘ABZ’ 和 ‘A2Z’ 都符合這一個(gè)模式,而 ‘AKKZ’ 并不符合 (因?yàn)樵?A 和 Z 之間有兩個(gè)字符,而不是一個(gè)字符)。 ‘ABC%’

    2024年02月09日
    瀏覽(1354)
  • 主流數(shù)據(jù)庫(kù)(SQL Server、Mysql、Oracle)通過sql實(shí)現(xiàn)多行數(shù)據(jù)合為一行

    主流數(shù)據(jù)庫(kù)(SQL Server、Mysql、Oracle)通過sql實(shí)現(xiàn)多行數(shù)據(jù)合為一行

    1、方法一:使用 STUFF 和 FOR XML PATH 進(jìn)行多行合并成一行 (1)FOR XML PATH用法 FOR XML 是 SQL Server 提供的一種功能,允許您將查詢結(jié)果轉(zhuǎn)換為 XML 格式。 PATH 模式則是其中一種靈活的方式來構(gòu)造自定義的XML結(jié)構(gòu)。 1、基本字符串連接 : 當(dāng)您想從單列中提取所有行的數(shù)據(jù)并連接成一

    2024年04月10日
    瀏覽(95)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包