Mike Cain DB2 for i Center of Excellence Rochester, MN USA mcain@us.ibm.com db2fori.blogspot.com How to Boost Query Performance Using Indexes COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training in·dex Something that serves to guide, point out, or otherwise facilitate reference. COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation Indexing Technology within DB2 for i COMMON Sweden 2013 / Copyright 2013 IBM Corporation IBM Training DB2 for i Two types of indexing technologies are supported – Radix Index – Encoded Vector Index (OmniFind Text Index will be covered later) Each type of index has specific uses and advantages Respective indexing technologies compliment each other Indexes can be used for statistics and implementation Indexes can provide RRNs and/or data Indexes are scanned or probed – Probe can only occur on contiguous, leading key columns – Scan can occur on any key column – Probe and scan can be used together COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Using Indexes - Probe v Scan Index Key Columns (CUSTOMER, ORDER, ITEM) • Probe (key positioning) with leading, n contiguous key columns 1 1+2 1+2+3 • Scan (test) with any other key columns 2 3 2+3 CUSTOMER ORDER ITEM 001 B507 AB-2700 001 B607 CD-2000 002 B100 XY-1005 002 B102 AZ-5000 003 B709 HH-6500 004 B043 HH-6500 ...WHERE ORDER = ‘B102‘ AND CUSTOMER = 002 ...WHERE ITEM = ‘HH-6500’ ...WHERE ITEM = ‘CD-2000’ AND CUSTOMER = 001 …WHERE ITEM = ‘HH-6500’ OR COLOR = ‘RED’ COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Radix Index Index “tree” structure Key values are compressed – Common patterns are stored once – Unique portion stored in “leaf” pages – Positive impact on size and depth of the index tree Algorithm used to find values – Binary search – Modified to fit the data structure Maintenance – Index data is automatically spread across all available disk units – Tree is automatically rebalanced to maintain an efficient structure Temporary indexes – Considered a temporary data structure to assist the DB engine COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Radix Index ROOT Database Table 001 ARKANSAS 002 MISSISSIPPI 003 MISSOURI 004 IOWA 005 ARIZONA … … Test Node AR IZONA 005 ADVANTAGES: Very fast access to a single key value Also fast for small, selected range of key values (low cardinality) Provides order MISS IOWA 004 ISSIPPI 002 OURI 003 KANSAS 001 DISADVANTAGES: Table rows retrieved in order of key values (not physical order) which equates to random I/O’s No way to predict which physical index pages are next when traversing the index for large number of key values COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Index Probe Example EMPLOYEE Table Given an index on table EMPLOYEE keyed on STATE... SELECT * FROM EMPLOYEE WHERE STATE = ‘IOWA’ EMPLOYEE Index STATE Perform a probe into the range using the local selection value(s) RRN ... IOWA (004) IOWA (007) IOWA (010) IOWA (017) KANSAS (011) MISSISSIPPI (002) MISSISSIPPI (013) MISSOURI (003) ... COMMON Sweden 2013 / Copyright 2013 IBM Corporation RRN STATE 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 ARKANSAS MISSISSIPPI MISSOURI IOWA ARIZONA MONTANA IOWA NEBRASKA NEBRASKA IOWA KANSAS WISCONSIN MISSISSIPPI WISCONSIN WISCONSIN ARKANSAS IOWA © 2012 IBM Corporation IBM Training Encoded Vector Index (EVI) Index for delivering fast data access in analytical and reporting environments – Advanced technology from IBM Research – Used to produce dynamic bitmaps and RRN lists – Fast access to statistics to improve query optimizer decision making Not a “tree” structure Can only be created through an SQL interface or System i Navigator GUI CREATE ENCODED VECTOR INDEX SchemaName/IndexName ON SchemaName/TableName (ColumnName) INCLUDE ( SUM(ColumnName)); New in 7.1 Maintained aggregate to support index only access COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Encoded Vector Index (EVI) Symbol Table Key Value Code Count Include Include Sum() Sum() Arizona 1 5000 1500 2005 Arkansas 2 7300 3200 450 … Wisconsin 49 340 575 1200 Wyoming 50 2760 210 0 optional Vector RRN 1 1 17 2 5 3 9 4 2 5 7 6 50 7 49 8 5 9 … … Symbol table contains information for each distinct key value - Each key value is assigned a unique code (key compression) - Code is 1, 2, or 4 bytes depending on number of distinct key values Rather then a bit array for each distinct key value, use one array of codes COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Bitmap / RRN List Example Given an EVI on table EMPLOYEE keyed on STATE... Set bits in bitmap or return RRN list ...WHERE STATE = ‘ILLINOIS’ Vector Symbol Table Scan or binary search symbol table for key(s) and code(s) Key ARIZONA ARKANSAS CALIFORNIA COLORADO ILLINOIS IOWA KANSAS MISSISSIPPI ... Code 1 2 3 4 5 6 7 8 ... Scan vector for code(s) 1 17 5 9 2 7 50 49 5 . . . . . . . COMMON Sweden 2013 / Copyright 2013 IBM Corporation Bitmap 0 0 1 0 0 0 0 0 1 . . . . . . . Row 1 2 3 4 5 6 7 8 9 ... © 2012 IBM Corporation IBM Training Index ANDing Example State Workdept EVI EVI Intermediate RRN list 3 5 10 15 1000 AND 1005 (Merge) 1007 3001 3050 State SELECT * FROM EMPLOYEE WHERE STATE = ‘MINNESOTA' AND WORKDEPT IN ( 'B01', C01, 'E01') Intermediate RRN list Final RRN list 3 7 10 27 1000 1010 2035 3001 4100 3 10 1000 3001 Represents all the local selection Workdept COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Index ORing Example State Workdept EVI Radix Intermediate RRN list 4 1001 1005 OR 3051 (Merge) State SELECT * FROM EMPLOYEE WHERE STATE = ‘IOWA' OR WORKDEPT IN ( 'B01', C01, 'E01') Intermediate RRN list Final RRN list 2 8 1004 4105 2 4 8 1001 1004 1005 3051 4105 Represents all the local selection Workdept COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training EVI Symbol Table Only Example Given an EVI on table EMPLOYEE keyed on STATE... SELECT COUNT(*) FROM EMPLOYEE WHERE STATE = ‘Wisconsin’; SELECT COUNT(DISTINCT STATE) FROM EMPLOYEE; SELECT STATE, SUM(), SUM() FROM EMPLOYEE GROUP BY STATE; Symbol Table Key Value Search / Scan symbol table for key(s) and counts Code Count Arizona 1 Arkansas Include Include Sum() Sum() 5000 1500 2005 2 7300 3200 450 Wisconsin 49 340 575 1200 Wyoming 50 2760 210 0 … COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training DB2 for i cardinality The number of distinct elements in a set. • High cardinality = large distinct number of values • Low cardinality = small distinct number of values selectivity The number of elements matching the criteria. • High selectivity = small number of rows match • Low selectivity = large number of rows match In general… • A radix index is best when choosing a small set of rows and the key cardinality is high • An encoded vector index is best when choosing a set of rows and the key cardinality is low • Understanding the data and query are key COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Transactions table Transaction Number Transaction Type 100 million rows 3 transaction types Cardinality and Selectivity SELECT * FROM TRANSACTIONS WHERE TRANSACTION_NUMBER = 1; SELECT * FROM TRANSACTIONS WHERE TRANSACTION_TYPE = ‘D’ COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Creating SQL Indexes CREATE INDEX SQL statement CREATE INDEX MY_IX on MY_TABLE (KEY1, KEY2) CREATE ENCODED VECTOR INDEX SQL statement CREATE ENCODED VECTOR INDEX MY_EVI on MY_TABLE (KEY1) System i Navigator – Database graphical interface Primary Key, Foreign Key and Unique Key Constraints – CREATE TABLE – ALTER TABLE COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Creating Indexes COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Creating Indexes COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Creating Indexes COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Creating Indexes COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Creating Indexes COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Creation of Index with Derived Keys Creation of indexes with derived keys via SQL CREATE INDEX ORDERPRIORITYUPPER ON T1 (UPPER(ORDERPRIORITY) AS UORDERPRIORITY ASC); CREATE ENCODED VECTOR INDEX YEARQTR ON T1 (YEAR(ORDERDATE) AS ORDYEAR ASC, QUARTER(ORDERDATE) AS ORDQTR ASC); CREATE INDEX TOTALEXTENDEDPRICE ON T1 (QUANTITY * EXTENDEDPRICE AS TOTEXTPRICE ASC); NOTE: There are some restrictions on which indexes can be used by the optimizer COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Create Sparse Indexes from SQL Support of WHERE clause on SQL create index CREATE INDEX FASTDELIVER ON T1 (SHIPMODE ASC) WHERE SHIPMODE = 'NEXTDAYAIR‘ OR SHIPMODE = 'COURIER'; NOTE: Index is NOT used by the query optimizer (CQE and SQE) prior to 7.1 COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training When to a use Derived Index? Derived indexes may be useful for – Case insensitive searches (i.e UPPER(COL1) = ‘ABC’ – Data extracted from a column (i.e. SUBSTR(), YEAR(), MONTH()…) – Results of operations (i.e. COL1+COL2 , QTY * COST) – Might be useful to allow index only access in more cases – Reduce table scans and temporary data structures COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training IBM OmniFind Text Search Server for DB2 for i IBM i licensed product: 5733-OMF – No-charge offering – Requires IBM i 6.1 or 7.1 Delivers common DB2 Family text search technology – Advanced, linguistic high-speed textual searches – Support enabled for any character-based column – Search technology also supports Rich Text document formats • Example: LOB columns containing PDF or Microsoft® Word documents • IFS documents can be indexed with extra programming – Includes support for 26 different languages COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training OmniFind Database Requirements Some of the supported document format types: – Plain text – XML – HTML – Adobe PDF – Rich Text Format (RTF) – JustSystems Ichitaro – Microsoft Excel – Microsoft PowerPoint – Microsoft Word – Lotus® 123 – Lotus Freelance® – Lotus WordPro – Lotus Symphony – OpenOffice 1.1 & 2.0 – OpenOffice Calc – Quattro Pro – StarOffice Calc COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Text Index vs DB2 Index Text indexes stored outside of DB2 in IFS Text indexes have delayed maintenance – Changes logged to staging table – Index maintenance is scheduled Text indexes not protected by IBM i SMAPP Text indexes utilize different indexing methods – Table with VARCHAR(32000) column and 175,000 rows • DB2 Index object size: 1.7 GB • Text Index object size: 0.1 GB COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Interfaces A set of administrative stored procedures for starting and ending the text search server. • SYSTS_START • SYSTS_STOP A set of administrative stored procedures to create, drop, and maintain the text search index. • SYSTS_CREATE • SYSTS_DROP, • SYSTS_UPDATE Two built in functions to query the index • CONTAINS • SCORE System i Navigator 7.1 COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Built in DB2 Text Search functions CONTAINS – Searches a text search index using the criteria that are specified in a search argument and results about whether or not a match was found CONTAINS(column-name, search-argument, options) – column-name is the column over which the text search server is built – search-argument is the term or phrase to search for – options is an optional parameter that can be used to modify the query language or turn synonym matching on – If the term or phrase is found, returns 1 (i.e. true) COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training CONTAINS example Find the exact string “IBM” in the COMMENT column, using a host variable Assume a text search index is built over column COMMENT EXEC SQL DECLARE C1 CURSOR FOR SELECT CUSTKEY FROM CUSTOMERS WHERE CONTAINS(COMMENT, :search_arg) = 1 ORDER BY CUSTKEY; EXEC SQL SET :search_arg = ‘”IBM”'; EXEC SQL OPEN C1; COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Built in search functions SCORE – The SCORE function searches a text search index using criteria that are specified in a search argument and returns a relevance score that measures how well a document matches the search argument SCORE(column-name, search-argument, options) – column-name is the column over which the text search server is built – search-argument is the term or phrase to search for – options is an optional parameter that can be used to modify the query language or turn synonym matching on – The result of SCORE is a value between 0 and 1 (i.e. decimal) – A higher number indicates that a document contains a match for the search argument more frequently COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Score Example The following statement generates a list of employees in the order of how well their resumes match the query "programmer AND (java OR cobol)", along with a relevance value that is normalized between 0 (zero) and 100 SELECT EMPNO, INTEGER(SCORE(RESUME, 'programmer AND (java OR cobol)') * 100)) AS RELEVANCE FROM EMP_RESUME WHERE RESUME_FORMAT = ‘ASCII' AND CONTAINS(RESUME, 'programmer AND (java OR cobol)') = 1 ORDER BY RELEVANCE DESC COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation XML IBM Training Given a table with email messages store in xml format, within a VARCHAR column EMAIL The text index can be created with: CALL sysproc.systs_create('MYSCHEMA', 'XMLI', ’MYSCHEMA.MY_TABLE(EMAIL)', 'FORMAT XML') The “FORMAT XML” clause tells OmniFind that the column should be parsed and indexed as XML data COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation XML IBM Training Suppose the XML data being searched is in a format of: <?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>Nick</to> <from>Tiffany</from> <heading>OmniFind for DB2i</heading> <body> OmniFind is wonderful for working with XML data! </body> </note> COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Xpath in CONTAINS clause Use the CONTAINS function to search for documents that have “Nick” in the “to” section of the xml document SELECT EMAIL FROM MYCHEMA.MYTABLE WHERE CONTAINS(EMAIL, @xpath:''/note//to[.contains("Nick")]''') = 1 COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation Query Optimization (using indexes) COMMON Sweden 2013 / Copyright 2013 IBM Corporation IBM Training Data Access Methods Cost based optimization dictates that the fastest access method for a given table will vary based upon selectivity of the query High Response Time Table Scan Clustered, Skip Seq Probe Low Few Many Number of rows searched / accessed COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Strategy for Query Optimization Optimizing indexes will generally follow this simplified strategy: ? Gather list of indexes for statistics and costing implementation methods Consider the indexes based on how the index can be used Local selection Joining Grouping Ordering Index only access One index may be useful for statistics, and another useful for implementation COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Query Optimization Feedback Visual Explain SQE Plan Cache Indexes Advised SQE Plan Cache Snapshots SQL Monitor Data SQL request Query Optimization COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Indexing Advice from the Optimizer Both CQE and SQE provide index creation advice – QSYS2.SYSIXADV – System i Navigator CQE – – – – – Basic advice Radix index only Based on table scan and local selection columns only Temporary index creation information also provides insight CQE Visual Explain will try and tie pieces together to advice a better index SQE – – – – – Robust advice Radix and EVI indexes Based on all parts of the query Multiple indexes can be advised for the same query Some limitations COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Indexing Advice from the Optimizer… Local selection, Join, Group By, Order By Equals first, followed by one inequality (for probing) No ORed predicates involving different columns No derived keys No EVI include columns COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Autonomic Index Creation Optimizer can have the DB Engine create a temporary index Both full and sparse indexes can be created Temporary indexes are not used for statistics (unless running 7.1 + PTFs) Temporary indexes are maintained CQE – Temporary indexes are not reused and not shared – Usually a bottleneck in query performance – Can impact overall system performance – Can increase the amount of temporary storage used SQE – Temporary indexes are reused and shared across jobs and queries – Creation is based on “watching” the query requests over time – Creation is based on optimizer’s own index advice – Temporary index maintenance is delayed when all associated cursors closed COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Index Evaluator via Catalog Views select * from qsys2.sysindexstat; COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Index Evaluator via Catalog Views SYSINDEXSTAT Contains one row for every SQL index. Use this view when you want to see information for a specific SQL index or set of SQL indexes. The information is similar to that returned via Show Indexes in System i Navigator. SYSPARTITIONINDEXES Contains one row for every index built over a table partition or table member. Use this view when you want to see index information for indexes built on a specified table or set of tables. The information is similar to that returned via Show Indexes in System i Navigator. SYSTABLEINDEXSTAT Contains one row for every index that has at least one partition or member built over a table. If the index is over more than one partition or member, the statistics include all those partitions and members. COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Indexing Strategies COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Create all advised indexes? Nothing, let the system handle it? Monitor, analyze, and tune important tables and queries? Get some help? COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training DB2 for i The goals of creating indexes are: 1. Provide the optimizer the statistics needed to understand the data, based on the query 2. Provide the optimizer implementation choices, based on the selectivity of the query COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training The Process of Identifying Indexes Proactive method • Analyze the data model, application and SQL requests • Database PK, UK, RI constraints are helpful Reactive method • Rely on optimizer feedback and actual implementation methods • Rely on SQE’s ability to auto tune using temporary indexes Understand the data being queried • Column selectivity • Column cardinality COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Indexing Strategy - Basic Approach Radix Indexes • Common local selection columns Minimum • Join columns • Local selection columns + join columns • Local selection columns + grouping columns • Local selection columns + ordering columns Advanced Encoded Vector Indexes • Local selection column for index ANDing/ORing • Join columns (star or snowflake schema) • Index only access Requires knowledge of query optimization and data lifecycle •DISTINCT, COUNT, COUNT DISTINCT, SUM() Note: Columns used with equal conditions are first in key list COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Indexing Strategy – React to Implementatoin If the optimizer feedback indicates: Full table scan Create an index on local selection columns Temporary index Create an index on join columns Create an index on grouping columns Create an index on ordering columns Hash table Create an index on join columns Create an index on grouping columns “Perfect”, multiple key column radix indexes are usually best COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Analyzing the Data Model CUSTOMERS custkey ORDERS orderkey custkey DATES partkey datekey orderdate PARTS shipdate partkey suppkey SUPPLIERS suppkey COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training Examples select from where * orders shipdate = ‘2010-10-01’; select from where and * orders orderdate = ‘2010-10-01’ quantity = 0; select from inner join on where * orders o customers c o.custkey = c.custkey c.customer_number = 102; COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation IBM Training COMMON Sweden 2013 / Copyright 2013 IBM Corporation © 2012 IBM Corporation
© Copyright 2024