中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

app的設(shè)計(jì)與開(kāi)發(fā)網(wǎng)站優(yōu)化包括對(duì)什么優(yōu)化

app的設(shè)計(jì)與開(kāi)發(fā),網(wǎng)站優(yōu)化包括對(duì)什么優(yōu)化,貴陽(yáng)市網(wǎng)站做的最好的,做電子書(shū)網(wǎng)站系列文章目錄 2024年java面試(一)–spring篇2024年java面試(二)–spring篇2024年java面試(三)–spring篇2024年java面試(四)–spring篇2024年java面試–集合篇2024年java面試–redi…

系列文章目錄

  1. 2024年java面試(一)–spring篇
  2. 2024年java面試(二)–spring篇
  3. 2024年java面試(三)–spring篇
  4. 2024年java面試(四)–spring篇
  5. 2024年java面試–集合篇
  6. 2024年java面試–redis(1)
  7. 2024年java面試–redis(2)

文章目錄

  • 系列文章目錄
  • MVCC
  • 聚簇索引和非聚簇索引 (聚集索引和二級(jí)索引)
  • 哈希索引
  • 為什么用B+樹(shù)索引而不用哈希索引?
  • 為什么InnoDB推薦用整型自增主鍵,而不是uuid?
  • 索引失效場(chǎng)景有哪些
  • 事務(wù)4大特性
  • 事務(wù)隔離級(jí)別
  • 默認(rèn)隔離級(jí)別-RR
  • RR和RC使用場(chǎng)景
  • 并發(fā)事務(wù)帶來(lái)哪些問(wèn)題?
  • 應(yīng)該如何解決?
  • InnoDB 如何開(kāi)啟手動(dòng)提交事務(wù)?


MVCC

全稱(chēng)Multi-Version Concurrency Control,多版本并發(fā)控制。指維護(hù)一個(gè)數(shù)據(jù)的多個(gè)版本,使得讀寫(xiě)操作沒(méi)有沖突,快照讀為MySQL實(shí)現(xiàn)MVCC提供了一個(gè)非阻塞讀功能。MVCC的具體實(shí)現(xiàn),還需要依賴(lài)于數(shù)據(jù)庫(kù)記錄中的三個(gè)隱式字段、undo log日志、readView。

三個(gè)隱式字段:
在這里插入圖片描述
undo log日志:

回滾日志,在insert、update、delete的時(shí)候產(chǎn)生的便于數(shù)據(jù)回滾的日志。

當(dāng)insert的時(shí)候,產(chǎn)生的undo log日志只在回滾時(shí)需要,在事務(wù)提交后,可被立即刪除。

而update、delete的時(shí)候,產(chǎn)生的undo log日志不僅在回滾時(shí)需要,在快照讀時(shí)也需要,不會(huì)立即被刪除。

在這里插入圖片描述
readView:

ReadView(讀視圖)是快照讀SQL執(zhí)行時(shí)MVCC提取數(shù)據(jù)的依據(jù),記錄并維護(hù)系統(tǒng)當(dāng)前活躍的事務(wù)(未提交的)id。

ReadView中包含了四個(gè)核心字段:

在這里插入圖片描述
在這里插入圖片描述
不同的隔離級(jí)別,生成ReadView的時(shí)機(jī)不同:

READ COMMITTED:在事務(wù)中每一次執(zhí)行快照讀時(shí)生成Readview。

REPEATABLE READ:僅在事務(wù)中第一次執(zhí)行快照讀時(shí)生成ReadView,后續(xù)復(fù)用該ReadView

聚簇索引和非聚簇索引 (聚集索引和二級(jí)索引)

聚簇索引: 將數(shù)據(jù)存儲(chǔ)與索引放到了一塊,索引結(jié)構(gòu)的葉子節(jié)點(diǎn)保存了行數(shù)據(jù)(主鍵索引)

非聚簇索引: 將數(shù)據(jù)與索引分開(kāi)存儲(chǔ),索引結(jié)構(gòu)的葉子節(jié)點(diǎn)指向了數(shù)據(jù)對(duì)應(yīng)的位置(輔助索引)

聚簇索引的葉子節(jié)點(diǎn)就是數(shù)據(jù)節(jié)點(diǎn),而非聚簇索引的葉子節(jié)點(diǎn)仍然是索引節(jié)點(diǎn),只不過(guò)有指向?qū)?yīng)數(shù)據(jù)塊的指針。

聚集索引選取規(guī)則:

  1. 如果存在主鍵,主鍵索引就是聚集索引。
  2. 如果不存在主鍵,將使用第一個(gè)唯一(UNIQUE)索引作為聚集索引。
  3. 如果表沒(méi)有主鍵,或沒(méi)有合適的唯一索引,則InnoDB會(huì)自動(dòng)生成一個(gè)rowid作為隱藏的聚集索引。

哈希索引

哈希索引用索引列的值計(jì)算該值的hashCode,然后在hashCode相應(yīng)的位置存執(zhí)該值所在行數(shù)據(jù)的物理位置,因?yàn)槭褂蒙⒘兴惴?#xff0c;因此訪問(wèn)速度非???#xff0c;但是一個(gè)值只能對(duì)應(yīng)一個(gè)hashCode,而且是散列的分布方式,因此哈希索引不支持范圍查找和排序的功能

為什么用B+樹(shù)索引而不用哈希索引?

哈希索引,建立的是索引值的哈希值和物理磁盤(pán)地址之間的映射

(1)哈希沖突多的時(shí)候,性能也不一定就比B+樹(shù)好

(2)哈希索引不支持范圍查詢(xún),只能點(diǎn)對(duì)點(diǎn)查詢(xún),哈希運(yùn)算前的索引值和哈希運(yùn)算后的哈希值順序并不一定一樣

(3)哈希索引不能利用部分索引鍵查詢(xún),哈希索引在計(jì)算哈希值的時(shí)候是組合索引鍵合并后再一起計(jì)算哈希值,而不是單獨(dú)計(jì)算哈希值,所以通過(guò)組合索引的前面一個(gè)或幾個(gè)索引鍵進(jìn)行查詢(xún)的時(shí)候,哈希索引也無(wú)法被利用

為什么InnoDB推薦用整型自增主鍵,而不是uuid?

(1)uuid占用空間更多。uuid是隨機(jī)字符串,占用空間更多,整型更少。

(2)uuid排序不如整型容易。uuid是字符串,而節(jié)點(diǎn)中的索引值需要排序,顯然整型排序更容易。

(3)整型自增插入時(shí)可避免節(jié)點(diǎn)頻繁分裂。插入數(shù)據(jù)時(shí),自增主鍵對(duì)B+樹(shù)結(jié)構(gòu)影響很小,由于是遞增,往后加就行,而uuid是隨機(jī)的,可能插到中間,如果前面節(jié)點(diǎn)已經(jīng)滿(mǎn)了,會(huì)導(dǎo)致節(jié)點(diǎn)分裂(頁(yè)分裂)、樹(shù)結(jié)構(gòu)調(diào)整等大量耗費(fèi)性能的操作。

索引失效場(chǎng)景有哪些

(1)當(dāng)聯(lián)合索引不滿(mǎn)足最左匹配原則,相當(dāng)于創(chuàng)建多列索引,沒(méi)有最左優(yōu)先,那么聯(lián)合查詢(xún)也就失效(如果使用了<或者>右邊的索引將會(huì)失效改成>=或者<=就正常)

(2)在查詢(xún)時(shí),使用錯(cuò)誤的模糊查詢(xún)(如果僅僅是尾部模糊匹配,索引不會(huì)失效。如果是頭部模糊匹配,索引失效。)

(3)當(dāng)列使用運(yùn)算操作和函數(shù)時(shí),索引就失效了

(4)列使用了類(lèi)型轉(zhuǎn)換,也會(huì)導(dǎo)致索引失效(例如字符串類(lèi)型不加引號(hào)進(jìn)行查詢(xún))

(5)使用了is not null,那么索引就會(huì)失效(不固定取決于當(dāng)前數(shù)據(jù)庫(kù)表中的數(shù)據(jù)分布如果表中都有數(shù)據(jù)或者極少數(shù)沒(méi)有數(shù)據(jù)使用is null走索引 使用is not null不走索引因?yàn)楦鶕?jù)表中數(shù)據(jù)的量來(lái)決定如果量多就走全局掃描)

(6)or連接:如果or前的條件中的列有索引,而后面的列中沒(méi)有索引,那么涉及的索引都不會(huì)被用到。

事務(wù)4大特性

事務(wù)4大特性: 原子性、一致性、隔離性、持久性

原?性: 事務(wù)是最?的執(zhí)?單位,不允許分割。事務(wù)的原?性確保動(dòng)作要么全部完成,要么全不執(zhí)行

一致性: 執(zhí)?事務(wù)前后,數(shù)據(jù)保持?致,多個(gè)事務(wù)對(duì)同?個(gè)數(shù)據(jù)讀取的結(jié)果是相同的;

隔離性: 并發(fā)訪問(wèn)數(shù)據(jù)庫(kù)時(shí),?個(gè)?戶(hù)的事務(wù)不被其他事務(wù)所?擾,各并發(fā)事務(wù)之間數(shù)據(jù)庫(kù)是獨(dú)?的;

持久性: ?個(gè)事務(wù)被提交之后。它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變是持久的,即使數(shù)據(jù)庫(kù)發(fā)?故障也不應(yīng)該對(duì)其有任何影響。

事務(wù)靠什么保證:

  • 原子性:由undolog日志保證,他記錄了需要回滾的日志信息,回滾時(shí)撤銷(xiāo)已執(zhí)行的sql

  • 一致性:由其他三大特性共同保證,是事務(wù)的目的

  • 隔離性:由MVCC保證

  • 持久性:由redolog日志和內(nèi)存保證,mysql修改數(shù)據(jù)時(shí)內(nèi)存和redolog會(huì)記錄操作,宕機(jī)時(shí)可恢復(fù)

事務(wù)隔離級(jí)別

讀未提交: 最低的隔離級(jí)別,允許讀取尚未提交的數(shù)據(jù)變更,可能會(huì)導(dǎo)致臟讀、幻讀或不可重復(fù)讀。

讀已提交: 允許讀取并發(fā)事務(wù)已經(jīng)提交的數(shù)據(jù),可以阻?臟讀,但是幻讀或不可重復(fù)讀仍有可能發(fā)?。

可重復(fù)讀: 同?字段的多次讀取結(jié)果都是?致的,除?數(shù)據(jù)是被本身事務(wù)??所修改,可以阻?臟讀和不可重復(fù)讀,會(huì)有幻讀。

串行化: 最?的隔離級(jí)別,完全服從ACID的隔離級(jí)別。所有的事務(wù)依次逐個(gè)執(zhí)?,這樣事務(wù)之間就完全不可能產(chǎn)??擾。

隔離級(jí)別并發(fā)問(wèn)題
讀未提交可能會(huì)導(dǎo)致臟讀、幻讀或不可重復(fù)讀
讀已提交可能會(huì)導(dǎo)致幻讀或不可重復(fù)讀
可重復(fù)讀可能會(huì)導(dǎo)致幻讀
可串行化不會(huì)產(chǎn)??擾
隔離級(jí)別臟讀不可重復(fù)讀幻讀
讀取未提交
讀取已提交×
可重復(fù)讀××
可串行化×××

1、臟讀:臟讀就是指當(dāng)一個(gè)事務(wù)正在訪問(wèn)數(shù)據(jù),并且對(duì)數(shù)據(jù)進(jìn)行了修改,而這種修改還沒(méi)有提交到數(shù)據(jù)庫(kù)中,這時(shí),另外一個(gè)事務(wù)也訪問(wèn)這個(gè)數(shù)據(jù),然后使用了這個(gè)數(shù)據(jù)。

例如: 張三的工資為5000,事務(wù)A中把他的工資改為8000,但事務(wù)A尚未提交。 與此同時(shí), 事務(wù)B正在讀取張三的工資,讀取到張三的工資為8000。 隨后, 事務(wù)A發(fā)生異常,而回滾了事務(wù)。張三的工資又回滾為5000。 最后, 事務(wù)B讀取到的張三工資為8000的數(shù)據(jù)即為臟數(shù)據(jù),事務(wù)B做了一次臟讀。

2、不可重復(fù)讀:是指在一個(gè)事務(wù)內(nèi),多次讀同一數(shù)據(jù)。在這個(gè)事務(wù)還沒(méi)有結(jié)束時(shí),另外一個(gè)事務(wù)也訪問(wèn)該同一數(shù)據(jù)。那么,在第一個(gè)事務(wù)中的兩次讀數(shù)據(jù)之間,由于第二個(gè)事務(wù)的修改,那么第一個(gè)事務(wù)兩次讀到的的數(shù)據(jù)可能是不一樣的。這樣就發(fā)生了在一個(gè)事務(wù)內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,因此稱(chēng)為是不可重復(fù)讀。

例如: 在事務(wù)A中,讀取到張三的工資為5000,操作沒(méi)有完成,事務(wù)還沒(méi)提交。 與此同時(shí), 事務(wù)B把張三的工資改為8000,并提交了事務(wù)。 隨后, 在事務(wù)A中,再次讀取張三的工資,此時(shí)工資變?yōu)?000。在一個(gè)事務(wù)中前后兩次讀取的結(jié)果并不致,導(dǎo)致了不可重復(fù)讀。

3、幻讀:是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象,例如第一個(gè)事務(wù)對(duì)一個(gè)表中的數(shù)據(jù)進(jìn)行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時(shí),第二個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,以后就會(huì)發(fā)生操作第一個(gè)事務(wù)的用戶(hù)發(fā)現(xiàn)表中還有沒(méi)有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺(jué)一樣。

例如: 兩個(gè)cmd窗口開(kāi)啟事務(wù) 在第一個(gè)窗口中進(jìn)行查詢(xún)id=3,沒(méi)有數(shù)據(jù),此時(shí)在第二個(gè)窗口進(jìn)行插入id=3,在第一個(gè)窗口中也進(jìn)行插入id=3的操作顯示已經(jīng)存在,但是再查詢(xún)id=3也還是沒(méi)有數(shù)據(jù)

默認(rèn)隔離級(jí)別-RR

默認(rèn)隔離級(jí)別: 可重復(fù)讀;

同?字段的多次讀取結(jié)果都是?致的,除?數(shù)據(jù)是被本身事務(wù)??所修改;

可重復(fù)讀是有可能出現(xiàn)幻讀的,如果要保證絕對(duì)的安全只能把隔離級(jí)別設(shè)置成SERIALIZABLE;這樣所有事務(wù)都只能順序執(zhí)行,自然不會(huì)因?yàn)椴l(fā)有什么影響了,但是性能會(huì)下降許多。

第二種方式,使用MVCC解決快照讀幻讀問(wèn)題(如簡(jiǎn)單select),讀取的不是最新的數(shù)據(jù)。維護(hù)一個(gè)字段作為version,這樣可以控制到每次只能有一個(gè)人更新一個(gè)版本。

select id from table_xx where id = ? and version = V
update id from table_xx where id = ? and version = V+1

第三種方式,如果需要讀最新的數(shù)據(jù),可以通過(guò)GapLock+Next-KeyLock可以解決當(dāng)前讀幻讀問(wèn)題

select id from table_xx where id > 100 for update;
select id from table_xx where id > 100 lock in share mode;

RR和RC使用場(chǎng)景

事務(wù)隔離級(jí)別RC(read commit)和RR(repeatable read)兩種事務(wù)隔離級(jí)別基于多版本并發(fā)控制MVCC(multi-version concurrency control)來(lái)實(shí)現(xiàn)。

RCRR
實(shí)現(xiàn)多條查詢(xún)語(yǔ)句會(huì)創(chuàng)建多個(gè)不同的ReadView僅需要一個(gè)版本的ReadView
粒度語(yǔ)句級(jí)讀一致性事務(wù)級(jí)讀一致性
準(zhǔn)確性每次語(yǔ)句執(zhí)行時(shí)間點(diǎn)的數(shù)據(jù)第一條語(yǔ)句執(zhí)行時(shí)間點(diǎn)的數(shù)據(jù)

并發(fā)事務(wù)帶來(lái)哪些問(wèn)題?

臟讀: 當(dāng)一個(gè)事務(wù)正在訪問(wèn)數(shù)據(jù)并且對(duì)數(shù)據(jù)進(jìn)行了修改,而這種修改還沒(méi)提交到數(shù)據(jù)庫(kù)中,這時(shí)另外一個(gè)事務(wù)也訪問(wèn)了這個(gè)數(shù)據(jù),然后使用了這個(gè)數(shù)據(jù)。因?yàn)檫@個(gè)數(shù)據(jù)是沒(méi)有被提交的,那么事務(wù)讀到的這個(gè)數(shù)據(jù)是“臟數(shù)據(jù)”

丟失修改: 一個(gè)事務(wù)修改一個(gè)數(shù)據(jù)的時(shí),另外一個(gè)事務(wù)也讀取到這個(gè)數(shù)據(jù),當(dāng)?shù)谝粋€(gè)事務(wù)對(duì)他進(jìn)行修改后,第二個(gè)事務(wù)也進(jìn)行了修改,這樣第一個(gè)事務(wù)的修改結(jié)果就丟失了,因此被稱(chēng)為丟失修改

不可重復(fù)讀: 指一個(gè)事務(wù)內(nèi)多次讀同一個(gè)事務(wù),在這個(gè)事務(wù)還沒(méi)有結(jié)束的時(shí)候,另外一個(gè)事務(wù)也訪問(wèn)該數(shù)據(jù)。那么第一事務(wù)的兩次讀取數(shù)據(jù)之間,由于第二個(gè)事務(wù)的修改導(dǎo)致一個(gè)事務(wù)內(nèi)兩次讀到的數(shù)據(jù)是不太一樣的情況,因此稱(chēng)為不可重復(fù)讀。

幻讀: 幻讀與不可重復(fù)讀類(lèi)似。它發(fā)生在一個(gè)事務(wù)(T1)讀取了幾行數(shù)據(jù),接著另一個(gè)并發(fā)事務(wù)(T2)插入了一些數(shù)據(jù)時(shí)。在隨后的查詢(xún)中,第一個(gè)事務(wù)(T1)就會(huì)發(fā)現(xiàn)多了一些原本不存在的記錄,就好像發(fā)生了幻卷一樣,所以稱(chēng)為幻讀。

應(yīng)該如何解決?

并發(fā)事務(wù)可能造成:臟讀、不可重復(fù)讀和幻讀等問(wèn)題 ,這些問(wèn)題其實(shí)都是數(shù)據(jù)庫(kù)讀一致性問(wèn)題,必須由數(shù)據(jù)庫(kù)提供一定的事務(wù)隔離機(jī)制來(lái)解決,解決方案如下:

加鎖:在讀取數(shù)據(jù)前,對(duì)其加鎖,阻止其他事務(wù)對(duì)數(shù)據(jù)進(jìn)行修改。例如,讀的時(shí)候加共享鎖,此時(shí)其他事物無(wú)法修改相應(yīng)的數(shù)據(jù),寫(xiě)的時(shí)候加排他鎖,禁止其他事物讀寫(xiě)操作,但是這種做法性能較差。基于性能考慮MySQL提供了數(shù)據(jù)多版本并發(fā)控制(MVCC),也稱(chēng)為多版本數(shù)據(jù)庫(kù):不用加任何鎖, 通過(guò)一定機(jī)制生成一個(gè)數(shù)據(jù)請(qǐng)求時(shí)間點(diǎn)的一致性數(shù)據(jù)快照(Snapshot), 并用這個(gè)快照來(lái)提供一定級(jí)別 (語(yǔ)句級(jí)或事務(wù)級(jí)) 的一致性讀取,從用戶(hù)的角度來(lái)看,好象是數(shù)據(jù)庫(kù)可以提供同一數(shù)據(jù)的多個(gè)版本。

不可重復(fù)讀和幻讀的區(qū)別:

不可重復(fù)讀的重點(diǎn)是修改比如多次讀取一條記錄發(fā)現(xiàn)其中某列的值被修改,幻讀的重點(diǎn)在于新增或者刪除比如多次讀取一條記錄發(fā)現(xiàn)記錄增多或減少了。

InnoDB 如何開(kāi)啟手動(dòng)提交事務(wù)?

InnoDB 默認(rèn)是自動(dòng)提交事務(wù)的,每一次 SQL 操作(非 select 操作)都會(huì)自動(dòng)提交一個(gè)事務(wù),如果要手動(dòng)開(kāi)啟事務(wù)需要設(shè)置set autocommit=0禁止自動(dòng)提交事務(wù),相當(dāng)于開(kāi)啟手動(dòng)提交事務(wù)。

在 InnoDB 中設(shè)置了 autocommit=0,添加一條信息之后沒(méi)有手動(dòng)執(zhí)行提交操作,請(qǐng)問(wèn)這條信息可以被查到嗎?

autocommit=0 表示禁止自動(dòng)事務(wù)提交,在添加操作之后沒(méi)有進(jìn)行手動(dòng)提交,默認(rèn)情況下其他連接客戶(hù)端是查詢(xún)不到此條新增數(shù)據(jù)的。

http://www.risenshineclean.com/news/57084.html

相關(guān)文章:

  • 營(yíng)銷(xiāo)網(wǎng)站建設(shè)網(wǎng)絡(luò)公司網(wǎng)站搭建免費(fèi)
  • jsp做網(wǎng)站用到的軟件seo推廣的網(wǎng)站和平臺(tái)有哪些
  • 昆明做網(wǎng)站vrapp開(kāi)發(fā)者需要更新此app
  • 青島網(wǎng)站設(shè)計(jì)公司聯(lián)系方式企業(yè)網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣案例
  • 濟(jì)南專(zhuān)門(mén)做網(wǎng)站的公司有哪些湖南專(zhuān)業(yè)關(guān)鍵詞優(yōu)化
  • 網(wǎng)站建設(shè)費(fèi)做什么科目寫(xiě)軟文用什么軟件
  • 網(wǎng)站加速cdn百度搜索引擎廣告投放
  • 武漢網(wǎng)站建設(shè)公司哪家專(zhuān)業(yè)產(chǎn)品seo優(yōu)化
  • 鄭州公司網(wǎng)站設(shè)計(jì)宣傳產(chǎn)品的方式
  • 質(zhì)量好網(wǎng)站建設(shè)商家百度快速seo優(yōu)化
  • 廣告聯(lián)盟平臺(tái)系統(tǒng)網(wǎng)絡(luò)推廣優(yōu)化平臺(tái)
  • 素材動(dòng)圖網(wǎng)站餐飲店如何引流與推廣
  • 最好的網(wǎng)站建設(shè)公司哪家好站長(zhǎng)聯(lián)盟
  • 做網(wǎng)站js是什么海外游戲推廣平臺(tái)
  • 桂林廣告公司網(wǎng)站建設(shè)臨沂seo整站優(yōu)化廠家
  • 如何做日系風(fēng)格的網(wǎng)站 今日頭條
  • 兩學(xué)一做知識(shí)競(jìng)賽網(wǎng)站網(wǎng)絡(luò)營(yíng)銷(xiāo)方式有哪幾種
  • 給網(wǎng)站做排名優(yōu)化學(xué)什么好處長(zhǎng)沙seo網(wǎng)站優(yōu)化公司
  • 云南電信網(wǎng)站備案靠譜的代運(yùn)營(yíng)公司
  • 怎么做php網(wǎng)站一鍵開(kāi)發(fā)小程序
  • 做美食的網(wǎng)站百度百科官網(wǎng)
  • 有什么網(wǎng)站可以免費(fèi)建站建網(wǎng)站教程
  • 中山網(wǎng)站建設(shè)制作怎樣在百度上發(fā)布信息
  • 哪里網(wǎng)站建設(shè)公司好友鏈交易平臺(tái)
  • 服裝行業(yè)網(wǎng)站模板網(wǎng)絡(luò)推廣文案
  • xampp搭建wordpress長(zhǎng)沙優(yōu)化網(wǎng)站
  • 山東有哪些網(wǎng)絡(luò)公司優(yōu)化法治化營(yíng)商環(huán)境
  • 用dreamweaver怎么做網(wǎng)站百度推廣登錄賬號(hào)首頁(yè)
  • wordpress加中文字體山東搜索引擎優(yōu)化
  • 青海省建設(shè)廳官方網(wǎng)站建設(shè)云蘭州seo實(shí)戰(zhàn)優(yōu)化