Information sought in a database can be extracted through a query. However, the bigger the database, the slower the processing time it would take for a query to go through, hence query optimization techniques are conducted. Another reason for optimization can occur with complex queries operations.
Rarely see that an index is applied on every column in every table
Using indices for query optimization is like using the index at the back of the book to help you find the information/topic you need quickly. You could always scan all the tables just like you can read the entire book, but that is not efficient (Nevarez, 2010). You can use an index seek (ProductID = 77) or an index scan via adding an operand (ABS(ProductID) = 77), though a scan takes up more resources than a seek. You can combine them (ProductID = 77 AND ABS(SalesOrderID) = 12345), where you would seek via ProductID and scan for SalesOrderID. Indexing can be seen as an effective way to optimize your query, besides other methods like applying heuristic rules or ordering the query operations for efficient use of resources (Connolly & Begg, 2014). However, indices not being used have no use to us, as they take up space on our system (Nevarez, 2010) which can slow down your operations. Thus, they should be removed. That is why indexing shouldn’t be applied to every column in every table. Indexing in every column may not be necessary because it can also depend on the size of the table, indexing is not needed if the table is 3*4, but may be needed if a table is 30,000 * 12.
Thoughts on how to best manage data files in a database management system (DBMS)
Never assume, verify any changes you make with cold hard data. When considering how best to manage a database one must first learn if the data files or the data within the database are dynamic (users create, insert, update, delete regularly) or static (changes are minimal to non-existant) (Connolly & Begg, 2014). Database administrators need to know when to fine-tune their databases with useful indices on tables that are widely used and turn off those that are not used at all. Turning off those that are not used at all will saving space, optimize updated functions, and improving resource utilization (Nevarez, 2010). Knowing this will help us understand the nature of the database user. We can then re-write queries that are optimized via correct ordering of operations, removing unnecessary loops and do joins instead, how join, right join or left join properly, avoiding the wildcard (*) and call on data you need, and ensure proper use of internal temporary tables (those created on a server while querying). Also, when timing queries, make sure to test the first run against itself and avoid the accidental time calculation which includes data stored in the cache. Also, caching your results, using the cache in your system when processing queries is ideal. A disadvantage of creating too many tables in the same database is slower interaction times, so creating multiple databases with fewer tables (as best logic permits) may be a great way to help with caching your results (MySQL 5.5 Manual, 2004).
- Connolly, T., & Begg, C. (2014). Database Systems: A Practical Approach to Design, Implementation, and Management, 6th Edition. [VitalSource Bookshelf version]. Retrieved from http://online.vitalsource.com/books/9781323135761/epubcfi/6/508
- MySQL 5.5 Reference Manual. (2004). Retrieved from https://dev.mysql.com/doc/refman/5.5/en/creating-many-tables.html
- Nevarez, B. (2010). Index Selection and Query Optimizer. Retrieved from https://www.simple-talk.com/sql/performance/index-selection-and-the-query-optimizer/