CS122 Lecture 15 Winter Term,

Similar documents
DATA WAREHOUSING II. CS121: Relational Databases Fall 2017 Lecture 23

Chapter 12: Query Processing. Chapter 12: Query Processing

Chapter 12: Query Processing

Chapter 13: Query Processing

! A relational algebra expression may have many equivalent. ! Cost is generally measured as total elapsed time for

Chapter 13: Query Processing Basic Steps in Query Processing

Query Processing. Debapriyo Majumdar Indian Sta4s4cal Ins4tute Kolkata DBMS PGDBA 2016

Advanced Database Systems

Database System Concepts

DATABASE PERFORMANCE AND INDEXES. CS121: Relational Databases Fall 2017 Lecture 11

Chapter 12: Query Processing

Query Processing & Optimization

Announcement. Reading Material. Overview of Query Evaluation. Overview of Query Evaluation. Overview of Query Evaluation 9/26/17

CMSC424: Database Design. Instructor: Amol Deshpande

Hash-Based Indexing 165

SQL QUERY EVALUATION. CS121: Relational Databases Fall 2017 Lecture 12

Advanced Databases. Lecture 1- Query Processing. Masood Niazi Torshiz Islamic Azad university- Mashhad Branch

Introduction to Query Processing and Query Optimization Techniques. Copyright 2011 Ramez Elmasri and Shamkant Navathe

Implementation of Relational Operations. Introduction. CS 186, Fall 2002, Lecture 19 R&G - Chapter 12

Query Processing & Optimization. CS 377: Database Systems

CS122 Lecture 8 Winter Term,

Faloutsos 1. Carnegie Mellon Univ. Dept. of Computer Science Database Applications. Outline

CS 4604: Introduction to Database Management Systems. B. Aditya Prakash Lecture #10: Query Processing

CS-245 Database System Principles

Shuigeng Zhou. May 18, 2016 School of Computer Science Fudan University

Review. Support for data retrieval at the physical level:

Implementing Relational Operators: Selection, Projection, Join. Database Management Systems, R. Ramakrishnan and J. Gehrke 1

Algorithms for Query Processing and Optimization. 0. Introduction to Query Processing (1)

Database Applications (15-415)

Database Applications (15-415)

CS 245 Midterm Exam Winter 2014

Implementation of Relational Operations: Other Operations

Evaluation of Relational Operations

MASSACHUSETTS INSTITUTE OF TECHNOLOGY Database Systems: Fall 2017 Quiz I

Administriva. CS 133: Databases. General Themes. Goals for Today. Fall 2018 Lec 11 10/11 Query Evaluation Prof. Beth Trushkowsky

Indexing. Week 14, Spring Edited by M. Naci Akkøk, , Contains slides from 8-9. April 2002 by Hector Garcia-Molina, Vera Goebel

Fundamentals of Database Systems

RELATIONAL OPERATORS #1

Administrivia. CS 133: Databases. Cost-based Query Sub-System. Goals for Today. Midterm on Thursday 10/18. Assignments

Lecture 12. Lecture 12: Access Methods

MASSACHUSETTS INSTITUTE OF TECHNOLOGY Database Systems: Fall 2015 Quiz I

Query Processing. Solutions to Practice Exercises Query:

CS 245 Midterm Exam Solution Winter 2015

CS122 Lecture 10 Winter Term,

Indexing and Hashing

Chapter 12: Indexing and Hashing. Basic Concepts

Column Stores vs. Row Stores How Different Are They Really?

Problem Set 2 Solutions

Database Systems External Sorting and Query Optimization. A.R. Hurson 323 CS Building

What happens. 376a. Database Design. Execution strategy. Query conversion. Next. Two types of techniques

Chapter 12: Indexing and Hashing

15-415/615 Faloutsos 1

CAS CS 460/660 Introduction to Database Systems. Query Evaluation II 1.1

Query Processing Strategies and Optimization

Query Evaluation! References:! q [RG-3ed] Chapter 12, 13, 14, 15! q [SKS-6ed] Chapter 12, 13!

Evaluation of Relational Operations

TotalCost = 3 (1, , 000) = 6, 000

Kathleen Durant PhD Northeastern University CS Indexes

Query processing and optimization

7. Query Processing and Optimization

CSIT5300: Advanced Database Systems

Query optimization. Elena Baralis, Silvia Chiusano Politecnico di Torino. DBMS Architecture D B M G. Database Management Systems. Pag.

Query Processing: The Basics. External Sorting

Chapter 3. Algorithms for Query Processing and Optimization

FILE SYSTEMS. CS124 Operating Systems Winter , Lecture 23

Evaluation of relational operations

External Sorting Implementing Relational Operators

Overview of Implementing Relational Operators and Query Evaluation

DBMS Y3/S5. 1. OVERVIEW The steps involved in processing a query are: 1. Parsing and translation. 2. Optimization. 3. Evaluation.

Outline. Query Types

Query Processing. Introduction to Databases CompSci 316 Fall 2017

Hash table example. B+ Tree Index by Example Recall binary trees from CSE 143! Clustered vs Unclustered. Example

Midterm 1: CS186, Spring I. Storage: Disk, Files, Buffers [11 points] SOLUTION. cs186-

Query Optimization. Shuigeng Zhou. December 9, 2009 School of Computer Science Fudan University

Midterm 1: CS186, Spring I. Storage: Disk, Files, Buffers [11 points] cs186-

Physical Design. Elena Baralis, Silvia Chiusano Politecnico di Torino. Phases of database design D B M G. Database Management Systems. Pag.

SQL DATA DEFINITION: KEY CONSTRAINTS. CS121: Relational Databases Fall 2017 Lecture 7

Processing of Very Large Data

Introduction Alternative ways of evaluating a given query using

MASSACHUSETTS INSTITUTE OF TECHNOLOGY Database Systems: Fall 2008 Quiz II

Introduction to Database Systems CSE 414. Lecture 26: More Indexes and Operator Costs

Announcements. Reading Material. Recap. Today 9/17/17. Storage (contd. from Lecture 6)

Storage hierarchy. Textbook: chapters 11, 12, and 13

CSE Midterm - Spring 2017 Solutions

Physical Disk Structure. Physical Data Organization and Indexing. Pages and Blocks. Access Path. I/O Time to Access a Page. Disks.

Lecture 19 Query Processing Part 1

Data Storage. Query Performance. Index. Data File Types. Introduction to Data Management CSE 414. Introduction to Database Systems CSE 414

Chapter 13: Query Optimization. Chapter 13: Query Optimization

Overview of Query Processing and Optimization

CMPUT 391 Database Management Systems. Query Processing: The Basics. Textbook: Chapter 10. (first edition: Chapter 13) University of Alberta 1

University of Waterloo Midterm Examination Sample Solution

Examples of Physical Query Plan Alternatives. Selected Material from Chapters 12, 14 and 15

Chapter 12: Indexing and Hashing

Cost-based Query Sub-System. Carnegie Mellon Univ. Dept. of Computer Science /615 - DB Applications. Last Class.

Evaluation of Relational Operations: Other Techniques

Modern Database Systems Lecture 1

CS122 Lecture 3 Winter Term,

CS122 Lecture 4 Winter Term,

RAID in Practice, Overview of Indexing

Overview of Query Processing. Evaluation of Relational Operations. Why Sort? Outline. Two-Way External Merge Sort. 2-Way Sort: Requires 3 Buffer Pages

Transcription:

CS122 Lecture 15 Winter Term, 2014-2015

2 Index Op)miza)ons So far, only discussed implementing relational algebra operations to directly access heap Biles Indexes present an alternate access path for Binding specibic records Use indexes to create optimized implementations of relational algebra operations Apply index- based accesses in query plans where it makes sense to do so Optimizer needs strategies for how to use indexes Also needs accurate cost- estimates for index accesses

3 B + - Tree Index Op)miza)ons Will focus primarily on B + - tree indexes Virtually all databases have B + - tree indexes Other kinds of indexes are far less common (Not hard to Bigure out the details yourself, if curious ) Virtually all database indexes are secondary indexes Order of index- entries does not correspond to order of records in data Bile (which is usually a heap Bile) Primary indexes are in same search- key order as the Bile they are built against Looking up records referenced by the secondary index will likely incur many additional disk-seeks

4 Index Scans Previously discussed Bile scans Scan through entire table Bile, evaluating predicate against every record If predicate involves equality against a primary key, can stop when we Bind the record If a suitable index exists on columns referenced in the selection predicate, can perform an index scan instead Evaluate some portion of the predicate against the index, to identify which rows in the table to retrieve Index contains pointers to the records to retrieve If a suitable index is not available, must use a Bile scan

5 Index Scans (2) Can use indexes for different kinds of predicates B + - tree indexes: Equality- based lookups SELECT * FROM employees WHERE emp_id = 352103; Comparisons (a.k.a. range queries) SELECT * FROM employees WHERE annual_salary >= 85000; Hash indexes: Equality- based lookups only Planner/optimizer must understand what kinds of predicates can be optimized with different indexes

6 Index Scan: Equality on Key Index scan; equality on candidate- key attribute: Know that we will retrieve at most one record from table Procedure (and associated costs, worst case): Starting with root node in index, navigate the B + - tree to Bind the entry for the record One disk seek and one block- read, for each level in the tree Finally, use index s record- pointer to retrieve the record One more disk seek, and one more block- read Worst- case estimate: h i + 1 seeks, h i + 1 block- reads h i denotes the height of the index

7 Index Scan: Equality on Key (2) Optimizers can often assume much faster index access For a given B + - tree, not unusual for non- leaf nodes to comprise less than 1-2% of the tree Root, and many non- leaf nodes, will likely be in memory Optimizers can assume that only the leaf nodes will need to be loaded from disk Previous estimate: h i + 1 seeks, h i + 1 block- reads Assumes no index nodes are in memory A more optimistic estimate: 2 seeks, 2 block- reads Assumes all non- leaf index nodes are already loaded

8 Index Scan: Equality on Non- Key Can have indexes on non- key columns as well Table may contain many rows with specibied value Index contains pointers to records in table Bile Worst- case: record- pointers are in random order, and all records are in different blocks Assume n is number of records fetched via index Would incur up to n disk seeks and n block reads, on top of cost of navigating the index (h i seeks and h i block- reads) Normally it isn t nearly this bad Required blocks of table Bile may already be in memory If record pointer is used as a uniquibier in the search- key, index entries for a given value will not be in random order! Reading table- records for a given key will incur minimal seeks

9 Index Scan: Comparisons Range scans are also straightforward SELECT * FROM employees WHERE salary > 85000; Use index structure to navigate to starting point in sequence of leaf- nodes Traverse sequence of leaf- nodes, retrieving records referenced by index entries Example: index on employees.salary, in increasing order of salary values Navigate tree to where entries have salary value > 85000 Traverse leaf- node entries until entire index is scanned

10 Index Scan: Comparisons (2) Can also perform range- scans with < or conditions Example: index on employees.salary, in increasing order of salary values SELECT * FROM employees WHERE salary < 40000; In these cases: Start with smallest search- key value in index Scan through leaf records until (salary < 40000) Easily use index to satisfy any comparison (>,, <, )

11 Index Scan: Comparison Costs Can run into same issue as with equality- based index lookup on a non- key column: Index- scan retrieves rows that include record- pointers Index- scan will identify multiple rows Rows are almost certainly not in the same physical order as the logical order specibied by the index Will likely incur a large number of disk seeks: Potentially one seek per record retrieved (usually isn t this bad, but still imposes a very heavy cost) Potentially one seek per leaf- block in index, as well (assume we can ignore this, if indexes are well- maintained)

12 Index Scan: Comparison Costs (2) Given: h i is height of the B + - tree index n rows will match the comparison predicate Index entries for matching rows occupy b leaf- nodes Steps and their costs: Navigate to starting- point in sequence of leaf nodes h i disk seeks and h i block reads Read through b leaf- nodes b block reads (assume index has leaves in roughly sequential order) Fetch each of n records from table- Bile Up to a maximum of n disk seeks and n block reads Overall worst- case cost: h i + n seeks, h i + n + b block- reads

13 Index Scan: Comparison Costs (3) Could apply clever techniques: Read in multiple blocks of index entries that satisfy the selection predicate Sort entries based on record pointers Retrieve the records in that order However, results will no longer be in search- key order Not a huge issue, but interferes with Selinger- style optimization techniques Can t take advantage of records in search- key order further up the plan- tree

14 Index Scan: Comparison Costs (4) Generally, optimizer must choose when to use an index very carefully A simple Bile- scan will read every disk block, but will also incur far fewer disk seeks! A disk seek can be as expensive as 10+ sequential block- reads Index scan will only save time if a small number of records are being fetched (Use table statistics and costing estimates to guess how many rows a selection predicate might produce.) Can still sometimes use indexes for fast range- queries Index entries also contain search- key values Not every situation requires the entire record to be fetched

15 Indexes Can even satisfy some queries entirely from an index Example: SELECT department, AVG(salary) FROM employees GROUP BY department; Two- column index on (department, salary) In cases like this, most databases will compute the query entirely against the index Don t need to incur accesses to the table at all (Be aware of this when you design databases, too! )

16 Indexes and Complex Selec)ons Often have more complex selections: σ P1 P2 (r) Conjunctive selection Examine individual conditions to determine if an index can be used for any of them If a single condition can benebit from an index, e.g. P1: σ P1 P2 (r) = σ P2 (σ P1 (r)) Use index to optimize selection on P1, then apply other predicates in memory

17 Indexes and Complex Selec)ons (2) An index s search- key may include multiple attributes If predicate includes multiple comparisons on index- attrs, we can sometimes leverage index to speed lookup Example: table T with columns A, B, C, D B + - tree index on (A, B, C) SELECT * FROM T WHERE A = 5 AND B > 3; Rows satisfying these conditions will be adjacent in the index SELECT * FROM T WHERE B = 45 AND C < 12; Can t use index for this predicate " Index entries are ordered on A Birst, then B, and Binally C Entries with B = 45 will likely be scattered throughout index

18 Indexes and Complex Selec)ons (3) Complex selections: Conjunctive selection: σ P1 P2 (r) Disjunctive selection: σ P1 P2 (r) If we have multiple indexes on input table: Can perform individual selections, then apply set operations to compute complex selection Example: σ A = 15 B = 2 (t) Two different indexes on t: one on A, another on B Perform two index- scans to get record- pointers Use set- intersection on pointers to compute result (For disjunctive selection, use set- union instead) Finally, look up each record using its record- pointer t t a = 15 b = 2

19 Join Op)miza)ons Joins involve row lookups based on column- values Can frequently leverage indexes to improve performance Indexed Nested- Loop Join: for each tuple t r in r: using index on s, iterate over tuples t s in s that satisfy join condition: add join(t r, t s ) to result Inner loop is effectively performing index- based selection against s, based on the join condition Estimate cost of inner- loop lookups based on condition, and on whether attributes are candidate keys or not

20 Indexed Nested- Loop Join Worst case: database can only hold one block of each table in memory Indexed Nested- Loop Join: for each tuple t r in r: using index on s, iterate over tuples t s in s that satisfy join condition: add join(t r, t s ) to result Requires b r seeks and block- reads for outer loop Incurs cost n r c for inner loop c = cost of index- based selection; depends on index, the join predicate, etc.

21 Indexed Nested- Loop Join (2) Indexed Nested- Loop Join, worst- case cost: Requires b r seeks and block- reads for outer loop Incurs cost n r c for inner loop c = cost of index- based selection; depends on index, the join predicate, etc. Must be very careful to consider increased seek- costs! If an index is available on both sides of join, generally makes sense to put smaller table on outer loop Must perform one index- lookup per row in outer table Large fanout of B + - tree means index- lookup cost will likely be about same regardless of which is outer table

22 Hybrid Merge- Join Sort- merge join requires input relations to be sorted on join- attributes Usually will not be the case Generally store our records in heap Biles But, often have ordered indexes on the join- attributes, on one or both tables involved in the join Can use these indexes to perform a hybrid merge-join

23 Hybrid Merge- Join (2) Example: one relation is sorted, other is unsorted Have a B + - tree index on join- attrs of unsorted relation Procedure: Perform a merge join between records of sorted table and leaf- entries of the B + - tree index on unsorted table Intermediate results contain records from one table, and record- pointers into the other table Sort intermediate results on the record- pointers Minimize disk- seek costs from retrieving referenced records Retrieve and join in the referenced records

24 Hybrid Merge- Join load referenced records Example: Left table has sorted records B + - tree on right table s records, with record- pointers in entries Merge- joined result contains record pointers Sort results on record- pointers Load and join in referenced records in an order that minimizes disk seeks 301325 301792 302331 303155 301792 302331 305908 Smith Brown Jenkins 37 36 29 15:0723 21:0380 33:2101 301792 Smith 37 37:2599 sort on record- pointers 301792 301792 302331 Jones Smith Brown Davis Smith Smith Brown 34 37 36 28 37 37 36 15:0723 37:2599 21:0380 301792 15:0723 301792 37:2599 302126 04:1578 302331 21:0380 record pointers Records from sorted table B + - tree leaf entries

25 Hybrid Merge- Join (4) Can easily extend this procedure to merge- join two unsorted relations with appropriate ordered indexes BeneBits: Index entries are often much smaller than records themselves Sorting the index entries on record- pointers may be much more efbicient than sorting the actual records Drawbacks: Requires multiple sort/load passes to minimize disk seeks Sort on left table s record- pointers to load left table s tuples, then sort on right table s pointers to load right table s tuples May be faster to simply sort the input relations Results of hybrid merge- join won t be in search- key order

26 Mul)- Column Indexes Several situations where multi- column indexes are helpful Data warehouses: Standard data warehouse schema design has a few large fact tables surrounded by multiple smaller dimension tables Relatively small number of records in each dimension table Fact table records are comprised of: A foreign- key reference to a row in each dimension table One or more measures corresponding to that row s set of dimension values Queries against such a schema require many joins! dim_date dim_time fact_sales_data date_id time_id region_id category_id num_sales total_revenue dim_region dim_category

27 Bitmap Indexes Databases can provide bitmap indexes to make queries against these schemas incredibly fast A bitmap index on attribute A of a table T: Build a separate bitmap for every distinct value of A The bitmap contains one bit for every record in T For a given value a j that appears in column A: If tuple t i holds value a j for column A, the bitmap for a j will store a 1 for bit i. Otherwise, bit i will be 0. For such an index to be feasible: Attribute A shouldn t contain too many distinct values (duh) Also, it must be easy to map bit i to tuple t i SpeciBically, we should generally only add rows to table T

28 Bitmap Index Example An example bitmap index: Sales data warehouse, with bitmap indexes on category and region Example query: SELECT SUM(total_revenue) FROM fact_sales_data NATURAL JOIN dim_region WHERE region_name = 'asia'; Could use region:asia bitmap; only fetch records with a 1- bit But, that s probably not actually faster than just doing a Bile- scan Fact table contents: Date Category Region Jun 21 apparel europe Jun 21 electronics asia Jun 21 books asia Jun 22 cookware n.america Jun 22 books n.america Jun 23 cookware asia Jun 23 electronics europe Jun 23 apparel asia Bitmap indexes: Category: apparel Category: books Category: cookware Category: electronics Region: asia Region: europe Region: n.america 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 1 0 0 1 1 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0

29 Bitmap Index Example (2) Reporting queries almost always include multiple conditions: SELECT SUM(total_revenue) FROM fact_sales_data NATURAL JOIN dim_region NATURAL JOIN dim_category WHERE region_name = 'asia' AND category_name = 'books'; Now we can get some real value out of the bitmap indexes! Conjunctive selection predicate: Only include rows that have a 1- bit in all relevant bitmap indexes Fact table contents: Date Category Region Jun 21 apparel europe Jun 21 electronics asia Jun 21 books asia Jun 22 cookware n.america Jun 22 books n.america Jun 23 cookware asia Jun 23 electronics europe Jun 23 apparel asia Bitmap indexes: Category: apparel Category: books Category: cookware Category: electronics Region: asia Region: europe Region: n.america 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 1 0 0 1 1 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0

30 Bitmap Index Example (3) Our query: SELECT SUM(total_revenue) FROM fact_sales_data NATURAL JOIN dim_region NATURAL JOIN dim_category WHERE region_name = 'asia' AND category_name = 'books'; Compute intersection of relevant bitmap indexes Only retrieve rows that have a 1- bit for all referenced columns Fact table contents: Date Category Region Jun 21 apparel europe Jun 21 electronics asia Jun 21 books asia Jun 22 cookware n.america Jun 22 books n.america Jun 23 cookware asia Jun 23 electronics europe Jun 23 apparel asia Relevant bitmap indexes: Region: asia Category: books Intersection: This is why it must be easy to Bind t i given i: don t want to have to access rows with a 0- bit at all 0 1 1 0 0 1 0 1 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0

31 NULL ANribute Values If a row has NULL for the indexed column: Simply store 0 for all bits in corresponding bitmap indexes Note: This would be highly unusual in a data warehouse fact- table! Could still occur in other situations Fact table contents: Date Category Region Jun 21 apparel europe Jun 21 electronics asia Jun 21 books asia Jun 22 cookware n.america Jun 22 books n.america Jun 23 cookware asia Jun 23 electronics europe Jun 23 apparel asia Jun 24 NULL n.america Bitmap indexes: Category: apparel Category: books Category: cookware Category: electronics Region: asia Region: europe Region: n.america 1 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1

32 Deleted Rows If rows are deleted from table: Still need to easily map bit at index i to tuple t i in the table! Need a way to represent gaps of deleted rows in bitmap index Solution: an existence bitmap Include an extra bitmap that specibies 1 if row is valid, or 0 if row is deleted Queries that use bitmap index also include existence bitmap in tests Fact table contents: Date Category Region Jun 21 apparel europe Jun 21 electronics asia Jun 21 books asia Jun 22 cookware n.america Jun 22 books n.america Jun 23 cookware asia Jun 23 electronics europe Jun 23 apparel asia Jun 24 NULL n.america Bitmap indexes: Category: apparel Category: books Category: cookware Category: electronics Region: asia Region: europe Region: n.america 1 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1 Existence 1 1 0 1 1 1 1 1 0

33 Compressed Bitmaps Bitmap indexes aren t that large, but they do take up some space Bitmap indexes will usually contain large runs of 0- or 1- bits The more distinct values in a given column, the more 0- bits in the corresponding bitmaps Very suitable to compression! Could use standard compression mechanisms Would have to decompress before performing bitwise operations Fact table contents: Date Category Region Jun 21 apparel europe Jun 21 electronics asia Jun 21 books asia Jun 22 cookware n.america Jun 22 books n.america Jun 23 cookware asia Jun 23 electronics europe Jun 23 apparel asia Jun 24 NULL n.america Bitmap indexes: Existence Category: apparel Category: books Category: cookware Category: electronics Region: asia Region: europe Region: n.america 1 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 1

34 Compressed Bitmaps (2) Several bitmap compression techniques designed to allow efbicient bitwise operations on compressed data Doesn t achieve as high a compression level, but queries don t incur decompression overhead Example: Byte- aligned Bitmap Code (BBC) Bitmap is divided into bytes Bytes containing all 1- bits or 0- bits are gap bytes Bytes containing a mixture are called map bytes Control bytes specify runs of gap- bytes (run- length encoding), and also identify sequences of map- bytes

35 Compressed Bitmaps (3) Byte- aligned Bitmap Code (BBC) achieves very good compression, and is still quite fast but CPUs work most optimally with words, not bytes. Word- aligned Bitmap Code (WBC) and Word- Aligned Hybrid (WAH) code divide bitmaps into words Doesn t achieve same level of compression as BBC, but is much faster for bitmap operations One research result: WBC/WAH used 50% more space than BBC but was 12x faster Other bitmap compression mechanisms as well