Skip to content

Commit ca9fbdd

Browse files
committed
优化格式
1 parent 6acfb9e commit ca9fbdd

File tree

1 file changed

+28
-9
lines changed

1 file changed

+28
-9
lines changed

high-performance-index.adoc

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ include::_attributes.adoc[]
1313

1414
让我们带着下面这个问题,去看接下来的内容:
1515

16+
====
1617
TIP: 如何在一堆数据中查找某个数据?简单点,比如找出100以内的某个数。
18+
====
19+
1720

1821
索引优化应该是对查询性能优化最有效的手段。可以轻松提高几个数量级。
1922

@@ -118,13 +121,17 @@ MySQL 在读取的时候,并不是每条每条读取,而是每次读取一
118121

119122
接下来,我们了解一下算法相关的背景知识。
120123

121-
[TIP]
124+
122125
====
126+
[TIP]
127+
======
123128
我提到的问题:如何在一堆数据中查找某个数据?
124129

125130
从这些硬件上来看,在内存中,甚至在一二三级高速缓存中,查找最快。当然,前提是,这些存储足够存得下。
131+
======
126132
====
127133

134+
128135
==== 时间复杂度
129136

130137
时间复杂度用来检验某个算法处理一定量的数据要花多长时间。
@@ -210,11 +217,13 @@ latexmath:[\frac{(10^7)^{2} 条指令}{10^{9} 条指令/秒} = 1.00 * 10^{5} 秒
210217
* 最好的排序算法具有 O(n*log(n)) 复杂度
211218
* 糟糕的排序算法具有 O(n^2^) 复杂度
212219

213-
[TIP]
214220
====
221+
[TIP]
222+
======
215223
我提到的问题:如何在一堆数据中查找某个数据?
216224

217225
在条件允许的情况下,我们应该选择时间复杂度尽量小的算法。
226+
======
218227
====
219228

220229
==== 归并排序
@@ -234,12 +243,13 @@ image::assets/images/binary_search_23.gif[title="二分查找-最好情况", alt
234243

235244
image::assets/images/binary_search.gif[title="二分查找-最坏的情况", alt="二分查找", width="95%"]
236245

237-
238-
[TIP]
239246
====
247+
[TIP]
248+
======
240249
我提到的问题:如何在一堆数据中查找某个数据?
241250

242251
二分查找需要讲数组全部加载到内存中。但是,如果数据量特别大,加载不完,怎么办呢?能否只加载一部分数据呢?
252+
======
243253
====
244254

245255

@@ -256,11 +266,13 @@ image::assets/images/big_search_tree.jpeg[title="搜索树", alt="搜索树", wi
256266
我们来看一下最简单的树结构。
257267

258268

259-
[TIP]
260269
====
270+
[TIP]
271+
======
261272
我提到的问题:如何在一堆数据中查找某个数据?
262273

263274
树能否保持有序呢?
275+
======
264276
====
265277

266278

@@ -284,12 +296,13 @@ http://www.cs.usfca.edu/~galles/visualization/BST.html[二叉查找树在线演
284296
image::assets/images/skewedTree.png[title="最坏情况下的二叉查找树", alt="最坏情况下的二叉查找树", width="65%"]
285297

286298

287-
288-
[TIP]
289299
====
300+
[TIP]
301+
======
290302
我提到的问题:如何在一堆数据中查找某个数据?
291303

292304
能否能避免这种极端情况出现呢?
305+
======
293306
====
294307

295308

@@ -328,11 +341,13 @@ image::assets/images/binaray_plus_tree.png[title="B+Tree 索引结构", alt="B+T
328341

329342
WARNING: B+树种的 B 不是代表二叉(binary),而是代表平衡(balance),因为 B+树是从最早的平衡二叉树演化而来,但是 B+树不是一个二叉树。
330343

331-
[TIP]
332344
====
345+
[TIP]
346+
======
333347
我提到的问题:如何在一堆数据中查找某个数据?
334348

335349
有没有更快的查找算法呢?
350+
======
336351
====
337352

338353

@@ -348,11 +363,13 @@ image::assets/images/hash_table.jpg[title="哈希表", alt="哈希表", width="9
348363

349364
*真正的挑战是找到好的哈希函数,让哈希桶里包含非常少的元素。如果有了好的哈希函数,在哈希表里搜索的时间复杂度是 O(1)。*
350365

351-
[TIP]
352366
====
367+
[TIP]
368+
======
353369
我提到的问题:如何在一堆数据中查找某个数据?
354370

355371
Hash查找有什么问题吗?
372+
======
356373
====
357374

358375

@@ -1082,7 +1099,9 @@ image::assets/images/InnoDB_random_insert.png[title="向聚簇索引插入无序
10821099

10831100
索引覆盖查询还有很多陷阱可能会导致无法实现优化。 MySQL 查询优化器会在执行查询前判断是否有一个索引能进行覆盖。
10841101

1102+
====
10851103
WARNING: 这里思考一下,什么样的查询才是覆盖索引?需要满足什么条件?从 SQL 语句的组成来看。
1104+
====
10861105

10871106
从下面的查询来看:
10881107

0 commit comments

Comments
 (0)