前大眾點(diǎn)評(píng)資深研發(fā)專(zhuān)家對(duì)Mysql索引的解析與底層數(shù)據(jù)結(jié)構(gòu)的解刨

1:Mysql索引是什么

mysql索引: 是一種幫助mysql高效的獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)虾攻,這些數(shù)據(jù)結(jié)構(gòu)以某種方式引用數(shù)據(jù)类溢,這種結(jié)構(gòu)就是索引模孩⊙嵝。可簡(jiǎn)單理解為排好序的快速查找數(shù)據(jù)結(jié)構(gòu)筛欢。如果要查“mysql”這個(gè)單詞浸锨,我們肯定需要定位到m字母,然后從下往下找到y(tǒng)字母悴能,再找到剩下的sql揣钦。

1.1:索引分類(lèi)

單值索引:一個(gè)索引包含1個(gè)列 create index idx_XX on table(f1) 一個(gè)表可以建多個(gè)。 唯一索引: 索引列的值必須唯一漠酿,但允許有空值 create unique index idx_XX on table(f1) 復(fù)合索引: 一個(gè)索引包含多個(gè)列 如:create index idx_XX on table(f1,f2冯凹,..)

1.2:索引結(jié)構(gòu)

BTree Hash索引 full-text全文索引:

1.3:什么情況建立索引

主鍵自動(dòng)建立唯一索引 頻繁作為查詢條件的字段因該創(chuàng)建索引 查詢中與其他表關(guān)聯(lián)的字段,外鍵關(guān)系建立索引 頻繁更新的字段不適合建立索引 where條件里用不到的字段不建立索引 單鍵/復(fù)合索引的選擇(高并發(fā)下傾向復(fù)合) 查詢中排序的字段因建立索引 查詢中統(tǒng)計(jì)或分組字段

1.4:什么情況建不建立索引

頻繁增刪改的表 表記錄太少 數(shù)據(jù)重復(fù)且分布平均的表字段炒嘲。(重復(fù)太多索引意義不大)

2:Mysql索引為什么要用B+Tree實(shí)現(xiàn)

2.1:B+樹(shù)在數(shù)據(jù)庫(kù)索引中的應(yīng)用

目前大部分?jǐn)?shù)據(jù)庫(kù)系統(tǒng)及文件系統(tǒng)都采用B-Tree或其變種B+Tree作為索引結(jié)構(gòu)

1)在數(shù)據(jù)庫(kù)索引的應(yīng)用

在數(shù)據(jù)庫(kù)索引的應(yīng)用中宇姚,B+樹(shù)按照下列方式進(jìn)行組織 :

①?葉結(jié)點(diǎn)的組織方式 。B+樹(shù)的查找鍵 是數(shù)據(jù)文件的主鍵 夫凸,且索引是稠密的浑劳。也就是說(shuō) ,葉結(jié)點(diǎn) 中為數(shù)據(jù)文件的第一個(gè)記錄設(shè)有一個(gè)鍵夭拌、指針對(duì) 魔熏,該數(shù)據(jù)文件可以按主鍵排序衷咽,也可以不按主鍵排序 ;數(shù)據(jù)文件按主鍵排序蒜绽,且 B +樹(shù)是稀疏索引 镶骗, 在葉結(jié)點(diǎn)中為數(shù)據(jù)文件的每一個(gè)塊設(shè)有一個(gè)鍵、指針對(duì) 躲雅;數(shù)據(jù)文件不按鍵屬性排序 鼎姊,且該屬性是 B +樹(shù) 的查找鍵 , 葉結(jié)點(diǎn)中為數(shù)據(jù)文件里出現(xiàn)的每個(gè)屬性K設(shè)有一個(gè)鍵 相赁、 指針對(duì) 相寇, 其中指針執(zhí)行排序鍵值為 K的 記錄中的第一個(gè)。

②?非葉結(jié)點(diǎn) 的組織方式钮科。B+樹(shù) 中的非葉結(jié)點(diǎn)形成 了葉結(jié)點(diǎn)上的一個(gè)多級(jí)稀疏索引唤衫。 每個(gè)非葉結(jié)點(diǎn)中至少有ceil( m/2 ) 個(gè)指針 , 至多有 m 個(gè)指針 跺嗽。

2)B+樹(shù)索引的插入和刪除

①在向數(shù)據(jù)庫(kù)中插入新的數(shù)據(jù)時(shí)战授,同時(shí)也需要向數(shù)據(jù)庫(kù)索引中插入相應(yīng)的索引鍵值 ,則需要向 B+樹(shù) 中插入新的鍵值桨嫁。即上面我們提到的B-樹(shù)插入算法植兰。

②當(dāng)從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)時(shí),同時(shí)也需要從數(shù)據(jù)庫(kù)索引中刪除相應(yīng)的索引鍵值 璃吧,則需要從 B+樹(shù) 中刪 除該鍵值 楣导。即B-樹(shù)刪除算法

2.2:?索引在數(shù)據(jù)庫(kù)中的作用?

在數(shù)據(jù)庫(kù)系統(tǒng)的使用過(guò)程當(dāng)中,數(shù)據(jù)的查詢是使用最頻繁的一種數(shù)據(jù)操作畜挨。

最基本的查詢算法當(dāng)然是順序查找(linear search)筒繁,遍歷表然后逐行匹配行值是否等于待查找的關(guān)鍵字,其時(shí)間復(fù)雜度為O(n)巴元。但時(shí)間復(fù)雜度為O(n)的算法規(guī)模小的表毡咏,負(fù)載輕的數(shù)據(jù)庫(kù),也能有好的性能逮刨。 但是數(shù)據(jù)增大的時(shí)候呕缭,時(shí)間復(fù)雜度為O(n)的算法顯然是糟糕的,性能就很快下降了修己。

好在計(jì)算機(jī)科學(xué)的發(fā)展提供了很多更優(yōu)秀的查找算法恢总,例如二分查找(binary search)、二叉樹(shù)查找(binary tree search)等睬愤。如果稍微分析一下會(huì)發(fā)現(xiàn)片仿,每種查找算法都只能應(yīng)用于特定的數(shù)據(jù)結(jié)構(gòu)之上,例如二分查找要求被檢索數(shù)據(jù)有序尤辱,而二叉樹(shù)查找只能應(yīng)用于二叉查找樹(shù)上砂豌,但是數(shù)據(jù)本身的組織結(jié)構(gòu)不可能完全滿足各種數(shù)據(jù)結(jié)構(gòu)(例如厢岂,理論上不可能同時(shí)將兩列都按順序進(jìn)行組織),所以奸鸯,在數(shù)據(jù)之外咪笑,數(shù)據(jù)庫(kù)系統(tǒng)還維護(hù)著滿足特定查找算法的數(shù)據(jù)結(jié)構(gòu)可帽,這些數(shù)據(jù)結(jié)構(gòu)以某種方式引用(指向)數(shù)據(jù)娄涩,這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)上實(shí)現(xiàn)高級(jí)查找算法。這種數(shù)據(jù)結(jié)構(gòu)映跟,就是索引蓄拣。

索引是對(duì)數(shù)據(jù)庫(kù)表 中一個(gè)或多個(gè)列的值進(jìn)行排序的結(jié)構(gòu)。與在表 中搜索所有的行相比努隙,索引用指針 指向存儲(chǔ)在表中指定列的數(shù)據(jù)值球恤,然后根據(jù)指定的次序排列這些指針,有助于更快地獲取信息荸镊。通常情 況下 咽斧,只有當(dāng)經(jīng)常查詢索引列中的數(shù)據(jù)時(shí) ,才需要在表上創(chuàng)建索引躬存。索引將占用磁盤(pán)空間张惹,并且影響數(shù) 據(jù)更新的速度。但是在多數(shù)情況下 岭洲,索引所帶來(lái)的數(shù)據(jù)檢索速度優(yōu)勢(shì)大大超過(guò)它的不足之處宛逗。

2.3:為什么使用B-Tree(B+Tree)

1.文件很大,不可能全部存儲(chǔ)在內(nèi)存中盾剩,故要存儲(chǔ)到磁盤(pán)上

2.索引的結(jié)構(gòu)組織要盡量減少查找過(guò)程中磁盤(pán)I/O的存取次數(shù)(為什么使用B-/+Tree雷激,還跟磁盤(pán)存取原理有關(guān)。)

3.局部性原理與磁盤(pán)預(yù)讀告私,預(yù)讀的長(zhǎng)度一般為頁(yè)(page)的整倍數(shù)屎暇,(在許多操作系統(tǒng)中,頁(yè)得大小通常為4k)

4.數(shù)據(jù)庫(kù)系統(tǒng)巧妙利用了磁盤(pán)預(yù)讀原理驻粟,將一個(gè)節(jié)點(diǎn)的大小設(shè)為等于一個(gè)頁(yè)根悼,這樣每個(gè)節(jié)點(diǎn)只需要一次I/O就可以完全載入,(由于節(jié)點(diǎn)中有兩個(gè)數(shù)組格嗅,所以地址連續(xù))番挺。而紅黑樹(shù)這種結(jié)構(gòu),h明顯要深的多屯掖。由于邏輯上很近的節(jié)點(diǎn)(父子)物理上可能很遠(yuǎn)玄柏,無(wú)法利用局部性

二叉查找樹(shù)進(jìn)化品種的紅黑樹(shù)等數(shù)據(jù)結(jié)構(gòu)也可以用來(lái)實(shí)現(xiàn)索引,但是文件系統(tǒng)及數(shù)據(jù)庫(kù)系統(tǒng)普遍采用B-/+Tree作為索引結(jié)構(gòu)贴铜。

一般來(lái)說(shuō)粪摘,索引本身也很大瀑晒,不可能全部存儲(chǔ)在內(nèi)存中,因此索引往往以索引文件的形式存儲(chǔ)的磁盤(pán)上徘意。這樣的話苔悦,索引查找過(guò)程中就要產(chǎn)生磁盤(pán)I/O消耗,相對(duì)于內(nèi)存存取椎咧,I/O存取的消耗要高幾個(gè)數(shù)量級(jí)玖详,所以評(píng)價(jià)一個(gè)數(shù)據(jù)結(jié)構(gòu)作為索引的優(yōu)劣最重要的指標(biāo)就是在查找過(guò)程中磁盤(pán)I/O操作次數(shù)的漸進(jìn)復(fù)雜度。換句話說(shuō)勤讽,索引的結(jié)構(gòu)組織要盡量減少查找過(guò)程中磁盤(pán)I/O的存取次數(shù)蟋座。為什么使用B-/+Tree,還跟磁盤(pán)存取原理有關(guān)脚牍。

局部性原理與磁盤(pán)預(yù)讀

由于存儲(chǔ)介質(zhì)的特性向臀,磁盤(pán)本身存取就比主存慢很多,再加上機(jī)械運(yùn)動(dòng)耗費(fèi)诸狭,磁盤(pán)的存取速度往往是主存的幾百分分之一券膀,因此為了提高效率,要盡量減少磁盤(pán)I/O驯遇。為了達(dá)到這個(gè)目的芹彬,磁盤(pán)往往不是嚴(yán)格按需讀取,而是每次都會(huì)預(yù)讀妹懒,即使只需要一個(gè)字節(jié)雀监,磁盤(pán)也會(huì)從這個(gè)位置開(kāi)始,順序向后讀取一定長(zhǎng)度的數(shù)據(jù)放入內(nèi)存眨唬。這樣做的理論依據(jù)是計(jì)算機(jī)科學(xué)中著名的局部性原理:

當(dāng)一個(gè)數(shù)據(jù)被用到時(shí)会前,其附近的數(shù)據(jù)也通常會(huì)馬上被使用。

程序運(yùn)行期間所需要的數(shù)據(jù)通常比較集中匾竿。

由于磁盤(pán)順序讀取的效率很高(不需要尋道時(shí)間瓦宜,只需很少的旋轉(zhuǎn)時(shí)間)蝶锋,因此對(duì)于具有局部性的程序來(lái)說(shuō)鄙煤,預(yù)讀可以提高I/O效率瞧省。

預(yù)讀的長(zhǎng)度一般為頁(yè)(page)的整倍數(shù)烙博。頁(yè)是計(jì)算機(jī)管理存儲(chǔ)器的邏輯塊,硬件及操作系統(tǒng)往往將主存和磁盤(pán)存儲(chǔ)區(qū)分割為連續(xù)的大小相等的塊棍苹,每個(gè)存儲(chǔ)塊稱(chēng)為一頁(yè)(在許多操作系統(tǒng)中梳毙,頁(yè)得大小通常為4k)哪工,主存和磁盤(pán)以頁(yè)為單位交換數(shù)據(jù)斋攀。當(dāng)程序要讀取的數(shù)據(jù)不在主存中時(shí)已卷,會(huì)觸發(fā)一個(gè)缺頁(yè)異常,此時(shí)系統(tǒng)會(huì)向磁盤(pán)發(fā)出讀盤(pán)信號(hào)淳蔼,磁盤(pán)會(huì)找到數(shù)據(jù)的起始位置并向后連續(xù)讀取一頁(yè)或幾頁(yè)載入內(nèi)存中侧蘸,然后異常返回裁眯,程序繼續(xù)運(yùn)行。

我們上面分析B-/+Tree檢索一次最多需要訪問(wèn)節(jié)點(diǎn):

h =

數(shù)據(jù)庫(kù)系統(tǒng)巧妙利用了磁盤(pán)預(yù)讀原理讳癌,將一個(gè)節(jié)點(diǎn)的大小設(shè)為等于一個(gè)頁(yè)穿稳,這樣每個(gè)節(jié)點(diǎn)只需要一次I/O就可以完全載入。為了達(dá)到這個(gè)目的晌坤,在實(shí)際實(shí)現(xiàn)B- Tree還需要使用如下技巧:

每次新建節(jié)點(diǎn)時(shí)逢艘,直接申請(qǐng)一個(gè)頁(yè)的空間,這樣就保證一個(gè)節(jié)點(diǎn)物理上也存儲(chǔ)在一個(gè)頁(yè)里泡仗,加之計(jì)算機(jī)存儲(chǔ)分配都是按頁(yè)對(duì)齊的埋虹,就實(shí)現(xiàn)了一個(gè)node只需一次I/O。

B-Tree中一次檢索最多需要h-1次I/O(根節(jié)點(diǎn)常駐內(nèi)存)娩怎,漸進(jìn)復(fù)雜度為O(h)=O(logmN)。一般實(shí)際應(yīng)用中胰柑,m是非常大的數(shù)字截亦,通常超過(guò)100,因此h非常屑硖帧(通常不超過(guò)3)崩瓤。

綜上所述,用B-Tree作為索引結(jié)構(gòu)效率是非常高的踩官。

而紅黑樹(shù)這種結(jié)構(gòu)却桶,h明顯要深的多。由于邏輯上很近的節(jié)點(diǎn)(父子)物理上可能很遠(yuǎn)蔗牡,無(wú)法利用局部性颖系,所以紅黑樹(shù)的I/O漸進(jìn)復(fù)雜度也為O(h),效率明顯比B-Tree差很多辩越。

3:Mysql索引如何實(shí)現(xiàn)

1)主鍵索引:

MyISAM引擎使用B+Tree作為索引結(jié)構(gòu)嘁扼,葉節(jié)點(diǎn)的data域存放的是數(shù)據(jù)記錄的地址。下圖是MyISAM主鍵索引的原理圖:

(圖myisam1)

這里設(shè)表一共有三列黔攒,假設(shè)我們以Col1為主鍵趁啸,圖myisam1是一個(gè)MyISAM表的主索引(Primary key)示意《蕉瑁可以看出MyISAM的索引文件僅僅保存數(shù)據(jù)記錄的地址不傅。

2)輔助索引(Secondary key)

在MyISAM中,主索引和輔助索引(Secondary key)在結(jié)構(gòu)上沒(méi)有任何區(qū)別赏胚,只是主索引要求key是唯一的访娶,而輔助索引的key可以重復(fù)。如果我們?cè)贑ol2上建立一個(gè)輔助索引栅哀,則此索引的結(jié)構(gòu)如下圖所示:

同樣也是一顆B+Tree震肮,data域保存數(shù)據(jù)記錄的地址称龙。因此,MyISAM中索引檢索的算法為首先按照B+Tree搜索算法搜索索引戳晌,如果指定的Key存在鲫尊,則取出其data域的值,然后以data域的值為地址沦偎,讀取相應(yīng)數(shù)據(jù)記錄疫向。

MyISAM的索引方式也叫做“非聚集”的,之所以這么稱(chēng)呼是為了與InnoDB的聚集索引區(qū)分豪嚎。

4:InnoDB索引實(shí)現(xiàn)

雖然InnoDB也使用B+Tree作為索引結(jié)構(gòu)搔驼,但具體實(shí)現(xiàn)方式卻與MyISAM截然不同。

第一個(gè)重大區(qū)別是InnoDB的數(shù)據(jù)文件本身就是索引文件侈询。從上文知道舌涨,MyISAM索引文件和數(shù)據(jù)文件是分離的,索引文件僅保存數(shù)據(jù)記錄的地址扔字。而在InnoDB中囊嘉,表數(shù)據(jù)文件本身就是按B+Tree組織的一個(gè)索引結(jié)構(gòu),這棵樹(shù)的葉節(jié)點(diǎn)data域保存了完整的數(shù)據(jù)記錄革为。這個(gè)索引的key是數(shù)據(jù)表的主鍵扭粱,因此InnoDB表數(shù)據(jù)文件本身就是主索引。

上圖是InnoDB主索引(同時(shí)也是數(shù)據(jù)文件)的示意圖震檩,可以看到葉節(jié)點(diǎn)包含了完整的數(shù)據(jù)記錄琢蛤。這種索引叫做聚集索引。因?yàn)镮nnoDB的數(shù)據(jù)文件本身要按主鍵聚集抛虏,所以InnoDB要求表必須有主鍵(MyISAM可以沒(méi)有)博其,如果沒(méi)有顯式指定,則MySQL系統(tǒng)會(huì)自動(dòng)選擇一個(gè)可以唯一標(biāo)識(shí)數(shù)據(jù)記錄的列作為主鍵嘉蕾,如果不存在這種列贺奠,則MySQL自動(dòng)為InnoDB表生成一個(gè)隱含字段作為主鍵,這個(gè)字段長(zhǎng)度為6個(gè)字節(jié)错忱,類(lèi)型為長(zhǎng)整形儡率。

第二個(gè)與MyISAM索引的不同是InnoDB的輔助索引data域存儲(chǔ)相應(yīng)記錄主鍵的值而不是地址。換句話說(shuō)以清,InnoDB的所有輔助索引都引用主鍵作為data域。例如掷倔,下圖為定義在Col3上的一個(gè)輔助索引:

這里以英文字符的ASCII碼作為比較準(zhǔn)則眉孩。聚集索引這種實(shí)現(xiàn)方式使得按主鍵的搜索十分高效,但是輔助索引搜索需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然后用主鍵到主索引中檢索獲得記錄浪汪。

了解不同存儲(chǔ)引擎的索引實(shí)現(xiàn)方式對(duì)于正確使用和優(yōu)化索引都非常有幫助巴柿,例如知道了InnoDB的索引實(shí)現(xiàn)后,就很容易明白為什么不建議使用過(guò)長(zhǎng)的字段作為主鍵死遭,因?yàn)樗休o助索引都引用主索引广恢,過(guò)長(zhǎng)的主索引會(huì)令輔助索引變得過(guò)大。再例如呀潭,用非單調(diào)的字段作為主鍵在InnoDB中不是個(gè)好主意钉迷,因?yàn)镮nnoDB數(shù)據(jù)文件本身是一顆B+Tree,非單調(diào)的主鍵會(huì)造成在插入新記錄時(shí)數(shù)據(jù)文件為了維持B+Tree的特性而頻繁的分裂調(diào)整钠署,十分低效糠聪,而使用自增字段作為主鍵則是一個(gè)很好的選擇。

4:程序員進(jìn)階方法

以上是我總結(jié)出的Mysql索引底層數(shù)據(jù)結(jié)構(gòu)剖析谐鼎,但在此舰蟆,我還想給大家一種學(xué)習(xí)方法,讓大家不單單在理論有所收獲该面,還能在工作實(shí)踐中收獲更多夭苗。我推薦的這種方法。

不管你是面對(duì)目前流行的技術(shù)不知從何下手隔缀,需要突破技術(shù)瓶頸的可以學(xué)。

不管你是在公司待久了傍菇,過(guò)得很安逸猾瘸,但跳槽時(shí)面試碰壁。需要在短時(shí)間內(nèi)進(jìn)修丢习、跳槽拿高薪的可以學(xué)牵触。

不管你是沒(méi)有工作經(jīng)驗(yàn),但基礎(chǔ)非常扎實(shí)咐低,對(duì)java工作機(jī)制揽思,常用設(shè)計(jì)思想,常用java開(kāi)發(fā)框架掌握熟練的见擦,可以學(xué)钉汗。(小白就不要學(xué)了,先學(xué)好基礎(chǔ))

不管你是覺(jué)得自己很牛B鲤屡,一般需求都能搞定损痰。但是所學(xué)的知識(shí)點(diǎn)沒(méi)有系統(tǒng)化,很難在技術(shù)領(lǐng)域繼續(xù)突破的可以學(xué)酒来。

在此我向大家推薦一個(gè)交流學(xué)習(xí)群:575745314 (加群可以學(xué)習(xí)程序員進(jìn)階方法) 里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring卢未,MyBatis,Netty源碼分析,高并發(fā)辽社、高性能伟墙、分布式、微服務(wù)架構(gòu)的原理滴铅,JVM性能優(yōu)化這些成為架構(gòu)師必備的知識(shí)體系戳葵。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源,目前受益良多

以下是程序員的進(jìn)階方法:

一失息、源碼分析

二譬淳、分布式架構(gòu)

三、微服務(wù)

四盹兢、性能優(yōu)化

五邻梆、團(tuán)隊(duì)協(xié)作

六:電商實(shí)戰(zhàn)

七:并發(fā)編程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市绎秒,隨后出現(xiàn)的幾起案子浦妄,更是在濱河造成了極大的恐慌,老刑警劉巖见芹,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剂娄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡玄呛,警方通過(guò)查閱死者的電腦和手機(jī)阅懦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)徘铝,“玉大人耳胎,你說(shuō)我怎么就攤上這事√杷” “怎么了怕午?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)淹魄。 經(jīng)常有香客問(wèn)我郁惜,道長(zhǎng),這世上最難降的妖魔是什么甲锡? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任兆蕉,我火速辦了婚禮,結(jié)果婚禮上搔体,老公的妹妹穿的比我還像新娘恨樟。我一直安慰自己,他們只是感情好疚俱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布劝术。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪养晋。 梳的紋絲不亂的頭發(fā)上衬吆,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音绳泉,去河邊找鬼逊抡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛零酪,可吹牛的內(nèi)容都是我干的冒嫡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼四苇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼孝凌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起月腋,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蟀架,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后榆骚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體片拍,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年妓肢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捌省。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碉钠,死狀恐怖所禀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情放钦,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布恭金,位于F島的核電站操禀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏横腿。R本人自食惡果不足惜颓屑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耿焊。 院中可真熱鬧揪惦,春花似錦、人聲如沸罗侯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至纫塌,卻和暖如春诊县,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背措左。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工依痊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怎披。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓胸嘁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凉逛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子性宏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容