Download presentation
Presentation is loading. Please wait.
1
INDEXING (CHAPTER 11) 9/16/2018
2
TOPICS Basic concepts Hashing B+-tree 9/16/2018
3
INTRODUCTION Review E-R data model Conceptual Logical
Relational data model SQL Physical relation = a file Org. of records on a disk page Organization of attributes within a record Index Files 9/16/2018
4
Software Architecture of a DBMS
Query Parser Query Optimizer Query Interpretor Relational Algebra operators: , , , , , , , , Index structures Abstraction of records Buffer Pool Manager File System 9/16/2018
5
Implementation of б бSalary=30,000(Employee) Emp table:
SS# Name Age Salary dno 1 Joe 24 20000 2 Mary 20 25000 3 Bob 22 27000 4 Kathy 30 30000 5 Shideh 4000 Emp table: бSalary=30,000(Employee) Process the select operator using a file scan (linear scan) F1 = Open the file corresponding to Employee P = read first page of F1 While P is not null For each record in P, if the record satisfies the selection predicate then produce as output P = read next page of F1 /* P becomes null when EoF is reached */ SS# Name Age Salary dno 4 Kathy 30 30000 5 9/16/2018
6
Implementation of б бSalary=30,000(Employee) Emp table:
SS# Name Age Salary dno 1 Joe 24 20000 2 Mary 20 25000 3 Bob 22 27000 4 Kathy 30 30000 5 Shideh 4000 Emp table: бSalary=30,000(Employee) Process the select operator using a file scan (linear scan) F1 = Open the file corresponding to Employee P = read first page of F1 While P is not null For each record in P, if the record satisfies the selection predicate then produce as output P = read next page of F1 SS# Name Age Salary dno 4 Kathy 30 30000 5 Fetch the page from disk if not in the buffer pool 9/16/2018
7
Implementation of б бSalary=30,000(Employee) Emp table:
SS# Name Age Salary dno 1 Joe 24 20000 2 Mary 20 25000 3 Bob 22 27000 4 Kathy 30 30000 5 Shideh 4000 Emp table: бSalary=30,000(Employee) Process the select operator using a file scan (linear scan) F1 = Open the file corresponding to Employee P = read first page of F1 While P is not null For each record in P, if the record satisfies the selection predicate then produce as output P = read next page of F1 SS# Name Age Salary dno 4 Kathy 30 30000 5 Header 9/16/2018
8
TERMINOLOGY An exact match selection predicate: бSalary=30,000(Employee) , бFirstName=“Shideh”(Employee) A range selection predicate: бSalary>30,000(Employee) , бSalary<30,000(Employee), бSalary>30,000 and Salary < 32,000 (Employee) 9/16/2018
9
Analogy: Catalog cards in the library (more than one index).
INTRODUCTION (Cont…) Motivation: Speed-up those queries that reference only a small portion of the records in a file. Analogy: Catalog cards in the library (more than one index). Evaluation: 1. Access time (find) 2. Insertion time (find + add) 3. Deletion time (find + delete) 4. Space overhead Search-key: The attribute (or set of attributes) used to lookup records in a file Primary index: The index whose search key specifies the sequential order of the records within a file. Secondary index: The index whose search key does not specify the sequential order of the records within a file. 9/16/2018
10
Indexing Mapping of records to a finite space using a function (computation) E.g., 9/16/2018
11
K F(K) 10 10-1=9 11 11-2=9 12 12-3=9 13 13-4=9 14 14-5=9 15 15-6=9 16 16-7=9 17 17-8=9 18 18-9=9 19 19-10=9 20 20-2=18 21 21-3=18 22 22-4=18 … 29 29-11=18 30 30-3=27 31 31-4=27 39 39-12=27 K F(K) 40 40-4=36 .. 49 49-13=36 50 50-5=45 … 59 59-14=45 69 69-15=54 79 79-16=64 89 89-17=72 99 99-18=81 9/16/2018
12
KEY OBSERVATIONS A deterministic function (analytical) to map a large set of key values, potentially infinite in size, to a set that is small and finite. The deterministic function might be a randomizing function making it appropriate for processing exact-match selection predicate. To process range selection predicates, the deterministic function should be order-preserving. 9/16/2018
13
Assume, size of disk page = 2 data records = 5 index records.
INTRODUCTION (Cont…) Example: Assume, size of disk page = 2 data records = 5 index records. Indexing or not indexing? SELECT age SELECT age FROM personnel FROM personnel WHERE name = “Alice” WHERE name = “Don” Alaska Arizona California Florida Indiana Ohio Alaska Bob Alaska George Arizona David California Hellen California Jack Florida Frank Florida Charles 4 Indiana Joe Ohio Alice Ohio David Alice Bob Charles David Frank George Hellen Jack Joe State Name Age Other! 9/16/2018
14
Assume, size of disk page = 2 data records = 5 index records.
INTRODUCTION (Cont…) Example: Assume, size of disk page = 2 data records = 5 index records. Primary vs. Secondary” SELECT name SELECT age FROM personnel FROM personnel WHERE state = “Ohio” WHERE name = “David” Alaska Boston California Florida Indiana Ohio Alaska Bob Alaska George Boston David California Hellen California Jack Florida Frank Florida Charles 4 Indiana Joe Ohio Alice Ohio David Alice Bob Charles David Frank George Hellen Jack Joe State Name Age Else! 9/16/2018
15
Example: (page = 2 data = 5 index)
INTRODUCTION (Cont…) Example: (page = 2 data = 5 index) Exact match vs. Range SELECT name SELECT name FROM personnel FROM personnel WHERE state = “California” WHERE state >= “Alaska” and state <= “Florida” Speedup by employing binary search (is it possible?) Alaska Mass California Florida Indiana Ohio Alaska Bob Alaska George Mass David California Hellen California Jack Florida Frank Florida Charles 4 Indiana Joe Ohio Alice Ohio David Alice Bob Charles David Frank George Hellen Jack Joe State Name Age Else! 9/16/2018
16
Dense Index Files Dense index — Index record appears for every search-key value in the file. 9/16/2018
17
Example of Sparse Index Files
9/16/2018
18
Multilevel Index 9/16/2018
19
HASHING Hash function: K: the set of all search key values
V: the set of all bucket address h(K): K V K is large (perhaps infinite) but set of search-key values actually stored in the database is much smaller than K. Fast lookup: To find Ki, search the bucket with h(Ki) address. 9/16/2018
20
HASHING (Cont…) Example:
K = salary (set of all 6 digit integers) V = 1000 buckets addressed from 0 to 999 h(k) = k mod 1000. SELECT name FROM personnel WHERE salary = “120,100” To find a 120,100 salary, we should search bucket number 100. Hash is only appropriate for Exact match queries. A bad hash function maps the value to a subset of (or a few) buckets (e.g., h(k) = k mod 10. 9/16/2018
21
HASHING (Cont…) Clustered Hash Index Non-clustered Hash Index:
The index structure and its buckets are represented as a file (say file.hash) The relation is stored in file.hash (I.e., each entry in file.hash corresponds to a record in relation) Assuming no duplicates: the record can be accessed in 1 IO. Non-clustered Hash Index: The relation remains intact Each entry in file.hash has the following format: (search-key value, RID) Assuming no duplicates: the record can be accessed in 2 IO. 9/16/2018
22
HEAP FILE ORGANIZATION
Assume a student table: Student(name, age, gpa, major) t(Student) = 16 P(Student) = 4 Bob, 21, 3.7, CS Kane, 19, 3.8, ME Louis, 32, 4, LS Chris, 22, 3.9, CS Mary, 24, 3, ECE Lam, 22, 2.8, ME Martha, 29, 3.8, CS Chad, 28, 2.3, LS Tom, 20, 3.2, EE Chang, 18, 2.5, CS James, 24, 3.1, ME Leila, 20, 3.5, LS Kathy, 18, 3.8, LS Vera, 17, 3.9, EE Pat, 19, 2.8, EE Shideh, 16, 4, CS 9/16/2018
23
Non-Clustered Hash Index
A non-clustered hash index on the age attribute with 4 buckets, h(age) = age % B (24, (1, 2)) (20, (4,3)) (32, (3,1)) (16, (4,4)) (21, (1, 1)) (20, (1,3)) (24, (3,3)) (17, (2,4)) (28, (4,2)) (29, (3,2)) 1 2 (18, (1, 4)) 3 (22, (2,2)) (19, (2, 1)) (22, (4,1)) (19, (3, 4)) (18, (2,3)) Bob, 21, 3.7, CS Kane, 19, 3.8, ME Louis, 32, 4, LS Chris, 22, 3.9, CS Mary, 24, 3, ECE Lam, 22, 2.8, ME Martha, 29, 3.8, CS Chad, 28, 2.3, LS Tom, 20, 3.2, EE Chang, 18, 2.5, CS James, 24, 3.1, ME Leila, 20, 3.5, LS Kathy, 18, 3.8, LS Vera, 17, 3.9, EE Pat, 19, 2.8, EE Shideh, 16, 4, CS 9/16/2018
24
Clustered Hash Index A clustered hash index on the age attribute with 4 buckets, h(age) = age % B Mary, 24, 3, ECE Shideh, 16, 4, CS Louis, 32, 4, LS Leila, 20, 3.5, LS Bob, 21, 3.7, CS Tom, 20, 3.2, EE James, 24, 3.1, ME Vera, 17, 3.9, EE Chad, 28, 2.3, LS Martha, 29, 3.8, CS 1 2 Kathy, 18, 3.8, LS 3 Lam, 22, 2.8, ME Kane, 19, 3.8, ME Chris, 22, 3.9, CS Pat, 19, 2.8, EE Chang, 18, 2.5, CS 9/16/2018
25
Non-Clustered Hash Index
A non-clustered hash index on the age attribute with 4 buckets, h(age) = age % B Pointers are page-ids 500 (24, (1, 2)) (20, (4,3)) 1001 (32, (3,1)) (16, (4,4)) (21, (1, 1)) (20, (1,3)) (24, (3,3)) (17, (2,4)) (28, (4,2)) (29, (3,2)) 500 706 1 1001 2 706 (18, (1, 4)) 101 3 101 (22, (2,2)) (19, (2, 1)) (22, (4,1)) (19, (3, 4)) (18, (2,3)) Bob, 21, 3.7, CS Kane, 19, 3.8, ME Louis, 32, 4, LS Chris, 22, 3.9, CS Mary, 24, 3, ECE Lam, 22, 2.8, ME Martha, 29, 3.8, CS Chad, 28, 2.3, LS Tom, 20, 3.2, EE Chang, 18, 2.5, CS James, 24, 3.1, ME Leila, 20, 3.5, LS Kathy, 18, 3.8, LS Vera, 17, 3.9, EE Pat, 19, 2.8, EE Shideh, 16, 4, CS 9/16/2018
26
Clustered Hash Index (SEQUENTIAL LAYOUT)
A clustered hash index on the age attribute with 4 buckets, h(age) = age % 4 When the number of buckets are known in advance, the system may assume a sequentially laid file to eliminate the need for the hash directory. Shideh, 16, 4, CS Leila, 20, 3.5, LS James, 24, 3.1, ME Mary, 24, 3, ECE Bob, 21, 3.7, CS Kathy, 18, 3.8, LS Kane, 19, 3.8, ME Louis, 32, 4, LS Vera, 17, 3.9, EE Lam, 22, 2.8, ME Pat, 19, 2.8, EE Tom, 20, 3.2, EE Martha, 29, 3.8, CS Chris, 22, 3.9, CS Chad, 28, 2.3, LS Chang, 18, 2.5, CS 9/16/2018
27
Clustered Hash Index (SEQUENTIAL LAYOUT)
A clustered hash index on the age attribute with 4 buckets, h(age) = age % 4 When the number of buckets are known in advance, the system may assume a sequentially laid file to eliminate the need for the hash directory. Offset (bucket-id –1) times page size is for bucket-id Shideh, 16, 4, CS Leila, 20, 3.5, LS James, 24, 3.1, ME Offset 0 is for bucket 0 Offset Page Size is for bucket 1 Mary, 24, 3, ECE Bob, 21, 3.7, CS Kathy, 18, 3.8, LS Kane, 19, 3.8, ME Louis, 32, 4, LS Vera, 17, 3.9, EE Lam, 22, 2.8, ME Pat, 19, 2.8, EE Tom, 20, 3.2, EE Martha, 29, 3.8, CS Chris, 22, 3.9, CS Chad, 28, 2.3, LS Chang, 18, 2.5, CS 9/16/2018
28
Block address on disk Bucket Number 1 2 M-2 M-1 9/16/2018
29
Example of Non-Clustered Hash Index
9/16/2018
30
Overflow buckets Main buckets 340 981 460 1 181 2 321 551 761 91 22 72
340 981 Record pointer 460 1 Record pointer 181 Record pointer 2 Record pointer 321 551 Record pointer 761 91 Record pointer Record pointer Record pointer 22 72 9 522 Record pointer 9/16/2018
31
HASHING (Cont…) Loading factor Why a bucket might overflow?
B = # of buckets, S = # of records per bucket, R = # of records in the relation loading - factor = R / (B×S) The loading factor should not exceed 80%, if that happens, double B and re-hash. Why a bucket might overflow? Heavy loading of the file Poor hash functions Statistical peculiarities If a bucket overflows? Chaining: chain an empty bucket to the bucket that overflows. Open addressing: If bucket h(k) is full, store the record in h(k) + 1, if that is also full, try h(k) + 2, and so on. Two hash functions: If bucket h(k) is full, store the record in h’(k). 9/16/2018
32
HASHING (Cont…) Problem: The file grows and shrinks over time. Hence, how one should choose the hash function: 1. Based on current file size performance degradation as DB grows 2. Based on anticipated file size waste space initially (and reduced buffer hits) 3. Periodical reorganization time consuming 3.1. Choose new hash function 3.2. Recompute hash value on every record 3.3. Generate new bucket assignments Solution: Dynamic hash functions: dynamic modification of h to accommodate growth and shrinkage of the DB. (e.g., extendible hashing) 9/16/2018
33
HASHING (Cont…) Extendible hashing Choose a hash function (h) such that it results in a b (b = 32) bit binary number. The directory has a header that contains its depth, d. Each directory entry points to a hash bucket. Buckets are created on demand, as records are inserted. Each bucket contains a local depth used to find data. Directory depth 1 bucket 2 directory 00 01 10 siblings 11 9/16/2018
34
HASHING (Cont…) Extendible hashing (continued):
Every time a bucket overflows, its local depth is increased. If the local depth is greater than the depth of the directory, the directory’s depth is increased, causing the directory to double in size. Each directory entry has one sibling or buddy. Two entries are buddies if they have identical bit patterns except for the dth bit. Every time a bucket overflows, its local depth is increased. If the local depth is greater than the depth of the directory, then the directory’s depth is increased, causing the directory to double in size. A bucket can overflow at any desired loading factor. That is, a split might happen every time a bucket is 80% full. 9/16/2018
35
HASHING (Cont…) Retrieval with Extendible hashing: Retrieve (K0)
Calculate h’ = h(K0) Read depth d of the directory Interpret the d initial bits of h’ as an integer base 2, term this r. Retrieve the bucket pointed to by the rth entry Find the record in this bucket 5.1. If a hashing technique is used to organize the records in a bucket, use the d bits defined on that bucket 5.2. If necessary, follow the collision resolution scheme within this bucket. 9/16/2018
36
HASHING (Cont…) Insertion with Extendible hashing: Insert (K0)
Apply the first four steps of Retrieve (K0) to find bucket b. If the insertion of K0 into b result in no overflow then Insert K0 into b and return Otherwise, obtain a new bucket b’ Set the local depth of b’ and b to equal (local depth of b + 1) If the new depth is NOT greater than the depth of the directory 5.1. Distinguish between b and b’ using their new d and set the appropriate entry(ies) of the directory to point to each 5.2. Rehash the entries in bucket b and assign each individual entry to the appropriate bucket b or b’ 5.3. Insert (K0) If the new depth is greater than the depth of the directory 6.1 Increase the depth of the directory, doubling its size 6.2. Set each entry and its buddy to point to the old bucket that it was pointing to 6.3. Rehash the entries in bucket b and assign each individual entry to the appropriate bucket b or b’ 6.4. Insert (K0) 9/16/2018
37
HASHING (Cont…) Deletion with Extendible hashing: Delete (K0)
Apply the first four steps of Retrieve (K0) to find bucket b. If K0 is not b then return with value no found Otherwise, delete the entry corresponding to K0 If the sum of the number of entries on this page and its sibling page are below the size of a bucket then: 4.1. Copy the entries in the two buckets into one bucket b’ 4.2. Depth of b’ = (depth of b - 1) 4.3. Free bucket b 4.4. Locate the two hash directory entries pointing to b and its buddy. Set these two pointers to b’ 4.5. If every pointer in the directory equals its sibling pointer then decrease the depth of the directory by one and set each entry in an obvious manner. 9/16/2018
38
Use of Extendable Hash Structure: Example
Initial Hash structure, bucket size = 2 9/16/2018
39
Example (Cont.) Hash structure after insertion of one Brighton and two Downtown records 1 9/16/2018
40
Hash structure after insertion of Mianus record
Example (Cont.) Hash structure after insertion of Mianus record 00 01 10 11 9/16/2018
41
Hash structure after insertion of three Perryridge records
Example (Cont.) 000 001 010 011 100 101 110 111 Hash structure after insertion of three Perryridge records 9/16/2018
42
Example (Cont.) Hash structure after insertion of Redwood and Round Hill records 000 001 010 011 100 101 110 111 9/16/2018
43
Extendible Hashing A hash-index structure might be represented as a file. The directory might be represented in a disk page. Each budget is represented as a disk page (including the overflow pages). Assuming the disk page size is 128 Kilobytes, an index structure with 100 pages would consist of: 1 page for the index directory: assuming each entry in the directory is an RID (disk page number, slot number), it consists of two integers (4 bytes each) for a total of 8 bytes. Thus, the directory is 800 bytes long and fits in one disk page. 100 pages: one for each bucket. Directory occupies less than 1% of the total file size. Conclusion: The size of the hash-index file is dominated by the number of buckets. 9/16/2018
44
HASHING (Cont…) Extendible hashing:
The insertion algorithm of extendible hashing might crash when 9/16/2018
45
HASHING (Cont…) Hashing vs. Indexing Hashing is appropriate for exact match queries: (cannot support range queries) SELECT A1, A2, … FROM r WHERE (Ai = c) Indexing is appropriate for both range and exact match queries: WHERE (Ai <= c1) and (Ai > c2) 9/16/2018
46
Example Suppose that we are using extendable hashing on a file that contains records with the following search key values: 2, 3, 5, 7, 11, 17, 19, 23, 29, 31 Show the extendible hash structure for a 5 bit machine assuming hash function is h(x) = x mod 8 and buckets can hold three records 9/16/2018
47
B+-TREE B+-tree is a multi-level tree structured directory
Clustered: Leaf nodes contain the records, themselves. …. ... Root Internal Nodes Leaf Nodes Data File 9/16/2018
48
B+-TREE (Cont…) Non-clustered: Leaf nodes contain the pairs (P, K), where P is a pointer to the record in the file and K is a search-key. 9/16/2018
49
B+-TREE (Cont…) Leaf nodes Maintain between to n-1 values per leaf.
If i < j then Ki < Kj Every search-key value in the file appears in some leaf node. Suppose Li and Lj are two leaves and i < j, then every search value in Li is less than every search value in Lj. P1 K1 P2 . . . Pn-1 Kn-1 Pn (n-1) 2 5 7 10 (n = 4) 5 7 10 15 17 18 9/16/2018
50
B+-TREE (Cont…) 5 7 10 Internal nodes
Maintain between to n pointers per internal node root is an exception: It must have more than one pointer. Suppose a node with m pointers and 2<= i < m: Pi points to subtree containing search-key values < Ki and >= Ki-1. Pm points to subtree containing search-key values >= Km-1. P1 points to subtree containing search-key values < K1. n 2 2 3 5 7 10 6 11 9/16/2018
51
B+-TREE (Cont…) Lookup Find 7: 4 Ios
Find 4-20: 5 IOs (assuming primary index), 9 IOs (assuming secondary index) More than 10% selection: it is more efficient to do sequential scan (do not use the secondary index). Example: 10,000 records, select 1000 of them, 1000 records per disk page: (Sequential search: 10 IOs, Secondary index: potentially IOs) 30 8 41 50 4 7 10 20 40 47 52 9/16/2018
52
B+-TREE (Cont…) Analysis References:
“B” in B+-tree stands for Balanced. i.e., the length of every path from the root to a leaf node is the same. Hence, good performance for lookup, insertion, and deletion K: number of search key values in a file, then the path is < log (K). #K = 1,000,000, and 10 <= n <= 100 then at most 3 to 9 nodes be accessed. Insertion and Deletion should not destroy the balance of the tree. References: J. Jannink, Inplementing Deletion in B+-Trees, SIGMOD RECORD, Volume 24, Number 1 (March 1995), pages D. Comer, The Ubiquitous B-tree, ACM Computing Surveys, Volume 11, Number 2 (June 1979), pages n 2 9/16/2018
53
B+-TREE (Cont…) n = 4; Internal nodes: 2 to 4 pointers
Leaf nodes: 2 to 3 values 8 25 10 20 4 7 30 40 Insert 41 8 25 4 7 10 20 30 40 41 Insert 47 30 40 41 47 8 25 41 4 7 10 20 30 40 41 47 9/16/2018
54
B+-TREE (Cont…) Insert 50 Insert 52 9/16/2018 8 25 10 20 4 7 30 40 41
47 50 Insert 50 Insert 52 41 47 50 52 8 25 41 50 41 8 25 50 4 7 10 20 30 40 41 47 50 52 9/16/2018
55
B+-TREE (Cont…) Delete 20 underflow 9/16/2018 30 10 20 4 7 40 41 47 50
52 8 Delete 20 30 underflow 8 41 50 4 7 10 30 40 41 47 50 52 30 41 50 4 7 10 30 40 41 47 50 52 9/16/2018
56
HEAP FILE ORGANIZATION
Assume a student table: Student(name, age, gpa, major) t(Student) = 16 P(Student) = 4 Bob, 21, 3.7, CS Kane, 19, 3.8, ME Louis, 32, 4, LS Chris, 22, 3.9, CS Mary, 24, 3, ECE Lam, 22, 2.8, ME Martha, 29, 3.8, CS Chad, 28, 2.3, LS Tom, 20, 3.2, EE Chang, 18, 2.5, CS James, 24, 3.1, ME Leila, 20, 3.5, LS Kathy, 18, 3.8, LS Vera, 17, 3.9, EE Pat, 19, 2.8, EE Shideh, 16, 4, CS 9/16/2018
57
Non-Clustered Secondary B+-Tree
A non-clustered secondary B+-tree on the gpa attribute 3.6 (2.3, (4, 2)) (3, (1,2)) (3.7, (1, 1)) (3.9, (4,1)) (2.5, (2,3)) (3.1, (3,3)) (3.8, (3,2)) (3.9, (2,4)) (2.8, (2,2)) (3.2, (1,3) (3.8, (2,1)) (4, (3,1)) (2.8, (3,4)) (3.8, (1,4)) (3.5, (4,3)) (4, (4,4)) Bob, 21, 3.7, CS Kane, 19, 3.8, ME Louis, 32, 4, LS Chris, 22, 3.9, CS Mary, 24, 3, ECE Lam, 22, 2.8, ME Martha, 29, 3.8, CS Chad, 28, 2.3, LS Tom, 20, 3.2, EE Chang, 18, 2.5, CS James, 24, 3.1, ME Leila, 20, 3.5, LS Kathy, 18, 3.8, LS Vera, 17, 3.9, EE Pat, 19, 2.8, EE Shideh, 16, 4, CS 9/16/2018
58
Non-Clustered Primary B+-Tree
A non-clustered primary B+-tree on the gpa attribute 3.6 (2.3, (1, 1)) (3, (2,1)) (3.7, (3, 1)) (3.9, (4,1)) (2.5, (1,2)) (3.1, (2,2)) (3.8, (3,2)) (3.9, (4,2)) (2.8, (1,3)) (3.2, (2,3) (3.8, (3,3)) (4, (4,3)) (2.8, (1,4)) (3.8, (3,4)) (3.5, (2,4)) (4, (4,4)) Chad, 28, 2.3, LS Mary, 24, 3, ECE Bob, 21, 3.7, CS Chris, 22, 3.9, CS Kathy, 18, 3.8, LS Vera, 17, 3.9, EE Chang, 18, 2.5, CS James, 24, 3.1, ME Lam, 22, 2.8, ME Kane, 19, 3.8, ME Louis, 32, 4, LS Tom, 20, 3.2, EE Pat, 19, 2.8, EE Leila, 20, 3.5, LS Martha, 29, 3.8, CS 9/16/2018 Shideh, 16, 4, CS
59
Clustered B+-Tree 2.9 3.6 3.8 Chad, 28, 2.3, LS Mary, 24, 3, ECE
A clustered B+-tree on the gpa attribute It is impossible to have a clustered secondary B+-tree on an attribute. 2.9 3.6 3.8 Chad, 28, 2.3, LS Mary, 24, 3, ECE Bob, 21, 3.7, CS Chris, 22, 3.9, CS Kathy, 18, 3.8, LS Vera, 17, 3.9, EE Chang, 18, 2.5, CS James, 24, 3.1, ME Lam, 22, 2.8, ME Kane, 19, 3.8, ME Louis, 32, 4, LS Tom, 20, 3.2, EE Pat, 19, 2.8, EE Leila, 20, 3.5, LS Martha, 29, 3.8, CS Shideh, 16, 4, CS 9/16/2018
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.