* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Improving Database Performance
Survey
Document related concepts
Extensible Storage Engine wikipedia , lookup
Oracle Database wikipedia , lookup
Tandem Computers wikipedia , lookup
Entity–attribute–value model wikipedia , lookup
Microsoft Access wikipedia , lookup
Microsoft Jet Database Engine wikipedia , lookup
Clusterpoint wikipedia , lookup
Relational algebra wikipedia , lookup
Database model wikipedia , lookup
Microsoft SQL Server wikipedia , lookup
Relational model wikipedia , lookup
Transcript
Improving Database Performance Derrick Rapley [email protected] www.cfbookmark.com Agenda Query Life Cycle Caching Variable-based Query Caching <CFQueryParam> Stored Procedures Block Factor Caching Variable-based Query Caching Using SQL JOINS Microsoft Access Query Life Cycle 1. 2. 3. 4. 5. 6. 7. Request sent to CF to process a template ColdFusion executes <cfquery> CF sends SQL statement to the DB CF waits for a response from the DB DB parses the SQL statement DB executes the SQL statement DB returns record set to CF 1 record at a time Caching Queries that hardly change are perfect for caching. I.E. List of Document Types Queries can be stored in Shared Scope variables: Session, Application, Server Queries can be cached based on Results Variable-based Caching <CFQUERY name=“Application.doctypes” datasource=“#datasource#”> SELECT type_id, doc_type FROM doctype </CFQUERY> <select name=“doctype> <cfoutput query=“Application.doctypes”> <option value=“#type_id#”>#doc_type# </cfoutput> </select> Query Caching Two attributes can be used in <CFQUERY> CACHEDWITHIN-caches data for a specified time span CACHEDAFTER-caches data until a specific date is reached. Queries are only cached if there is enough space. If not, the query won’t cache and operate as normal. Perform a Q of Q on a Cached Query for ‘Next N’ records and search results <CFQUERYPARAM> Parsing, validating, and analyzing the query can take longer than actually processing it Simple queries are easy to cache. SELECT id, FirstName, LastName FROM Employees It’s a waste of time and space to cache dynamic queries, perfert for cfqueryparam. SELECT id, FirstName, LastName FROM Employees WHERE ID = <cfqueryparam value=“150" cfsqltype="CF_SQL_NUMERIC"> <CFQUERYPARAM> helps differentiate what is dynamic in the SQL statement <CFQUERYPARAM> Must be used within <CFQUERY></CFQUERY> Supports Bind Parameters Improves Performance Provides some benefits of Stored Procedures without using them Can be used with Stored Procedures when using <CFQUERY> to call them Can not be used with Cached Queries <CFQUERYPARAM VALUE=“150” CFSQLTYPE=“CF_SQL_INTEGER”> <CFQUERYPARAM> <CFQUERY name=“getEmployee” datasource=“#datasource#”> SELECT id, FirstName, LastName FROM Employees WHERE ID = <CFQUERYPARAM VALUE=“150” CFSQLTYPE=“CF_SQL_INTEGER”> </CFQUERY> <CFQUERYPARAM> CF_SQL_BIGINT CF_SQL_BIT CF_SQL_CHAR CF_SQL_DATE CF_SQL_DECIMAL CF_SQL_DOUBLE CF_SQL_FLOAT CF_SQL_IDSTAMP CF_SQL_INTEGER CF_SQL_LONGVARCHA R CF_SQL_MONEY CF_SQL_MONEY4 CF_SQL_NUMERIC CF_SQL_REAL CF_SQL_REFCURSOR CF_SQL_SMALLINT CF_SQL_TIME CF_SQL_TIMESTAMP CF_SQL_TINYINT CF_SQL_VARCHAR Stored Procedures Execute faster than SQL from the client Precompiled SQL Statements Stored in the database Returns the a complete record set as a result Can execute a block of Statements Increased Security Access to tables unavailable to the user Can use <CFQUERY> and <CFSTOREDPROC> <CFQUERY> OR <CFSTOREDPROC> <CFQUERY> Can only be used when native driver is available It only passes ODBC compliant code to an ODBC driver Stored Procedures can vary depending on which database is being used <CFSTOREDPROC> can always be used Block Factor Rows are retrieved from the database one row at a time Block Factor is the number of rows retrieved at one time (defaults to 1) Block Factor can hurt performance if too high of a Block Factor is declared SQL JOINS A Relational DB is key to using JOINS Advantages of Relational DB Data does not have to be repeated Easier to maintain Uses Less Storage Space Performs quicker than flat DB Documents DocType Doc_ID Title Doc_type_id Type_ID Doc_Type 101 Creating A Relational Database 11 11 Word 102 Using Stored Procedures 12 12 PDF 103 Caching Queries 13 XML 104 Joining Tables Together 11 Using Joins Specify tables in FROM clause SELECT documents.title, doctype.doc_type FROM documents, doctype How does the DB know which rows to join? Inner Joins Right Outer Joins Left Outer Joins Full Outer Joins Using Joins You must specify the join condition Can be specified in the WHERE clause SELECT doc.title, dt.doc_type FROM documents doc, doctype dt WHERE doc.doc_type_id = dt.type_id Can be spcified in the FROM clause (ANSISQL Standard) SELECT doc.title, dt.doc_type FROM documents doc JOIN doctype dt ON (doc.doc_type_id = dt.type_id) JOIN sytax is similar in most databases but can vary Inner Join If no Join is specified, then INNER JOIN is assumed SELECT doc.title, dt.doc_type FROM documents doc INNER JOIN doctype dt ON (doc.doc_type_id = dt.type_id) INNER JOIN only matches rows in both tables Outer Join LEFT OUTER JOIN Returns all rows from left table RIGHT OUTER JOIN Returns all rows from right table FULL OUTER JOIN Returns all rows from both tables Microsoft Access Obtain the latest ODBC drivers Obtain the latest MDAC Only allow 5-7 simultaneous (per Processor) requests to Access Uncheck ‘Maintain Database Connection’ in CF Administrator Max Buffer should be set to 0