About Us

The ever changing database management challenges
With the rapid changes of modern databases, database administrators and developers have to learn and manage new features provided by databases with short period of time. There is always a time gap between fully mastering new features and actually implementing the new features in production.

Easy-to-use AI enabled tools for SQL & database performance tuning
Tosska Technologies is a company that focuses in providing solutions for database and SQL related performance optimization and improvements. Our mission is to help users to smooth out the hurdle by our new technologies. Indeed Tosska is one of the very few companies in the world that focus in using artificial intelligence technology to solve various database performance problems. It is our goal to help our customers to reduce their hardware investment; increase their database applications service level and free up their human resources for more strategic activities with our innovative technologies.

Our Products

The Tosska SQL Tuning Expert Products Family

Not just another SQL Tuning tool !
Most SQL tuning products in the market aim to provide better query plan visualization, better statistics analysis, high cost query plan steps indication or even rule-of-thumb syntax recommendations. But very few of them can provide satisfactory tuning results directly. They require users to have in-depth SQL tuning knowledge to manually intervene the SQL tuning process amid their busy daily duties. In fact users are looking for one-button-solution tool that have all the required SQL tuning knowledge built-in and can tune a SQL statement automatically without the need of users’ intervention. If you are looking for such tools, these are the products you must look into !

World’s Leading A.I. SQL Rewrite technology for SQL
Manually rewriting SQL syntax to tune a SQL statement is commonly adopted by experienced developers and DBAs, but the effort and cost to rewrite a SQL statement is quite expensive. Tosska A.I. SQL Rewrite Engine not only saves the developer’s time to rewrite a problematic SQL statement to make it faster, but it also explores the potential best SQL syntax that even an experienced developer cannot discover. Tosska A.I. rewritten SQL syntax can work with our Hints-injection algorithm to further explore more potential query plans that even most experienced developers cannot achieve.


Tosska SQL Tuning Expert (TSES™) for SQL Server®

There are not many SQL tuning tools for SQL Server database that can provide automated direct SQL tuning results. Tosska SQL Tuning Expert (TSES™) for SQL Server® is a a one-button-solution tool that can tune SQL Server SQL statements automatically without the need of your intervention. You can just sit back, relax, and wait for the best SQL alternative to come up on your screen.

Probably the World’s First SQL Server A.I. SQL Tuning Tool for SET ROWCOUNT N
Many people do not know that the Set Rowcount N setting can affect the SQL’s query plan and some SQLs’ performance may be degraded and resulted in an even worse query plan. Tosska SQL Tuning Expert for SQL Server is probably the first tool that can solve this problem automatically with our A.I. engine.

Powerful Cold Cache SQL Tuning for Infrequent Executed SQL Statements
Cold cache will significantly affect the performance of a SQL statement. A good performance SQL for hot cache may not be performing well in a cold cache environment. Tosska SQL Tuning Expert for SQL Server provides a handy function for users to benchmark SQL alternatives in both environments without complicated manual operations.

View Details | Free Download | Buy License

Tosska SQL Tuning Expert (TSEM™) for MySQL®
As a member of the TSE product family, TSEM™ provides all the automatic A.I. machine tuning capability of TSE but tailors for the MySQL database. It is a one-button-solution tool that can tune MySQL SQL statement automatically without the need of your intervention. You no longer need to rewrite or try every possible Hints combination manually for a problematic SQL statement to explore potential better performance execution plans, since all those hard tasks are released by our embedded AI engine.

Probably the World’s ONLY A.I.-based SQL Rewrite solution for MySQL database
It not only saves developer’s time to rewrite a problematic SQL statement to make it faster, but also explores the potential best SQL syntax that even an experienced developer cannot discover. Tosska A.I. rewritten SQL syntax can also work with our Hints-injection algorithm to further explore more potential query plans that even most experienced developers cannot achieve.
A 100 times faster SQL rewrite is generated on the right hand side.

Tosska proprietary Tree Plan format for your easy understanding
Tosska SQL Tuning Expert (TSEM™) for MySQL® has a market leading explain plan function for MySQL. The proprietary Tree Plan format provides rich statistics information like what is provided by Tubular Explain from MySQL, as well as a hierarchical structure like what is displaying in visual plan. The beauty is that all such information can be displayed in a small window for easy reading.

Tosska Tree Plan

View Details | Free Download | Buy License

 
Tosska SQL Tuning Expert for Oracle® (TSE™ and TSE Pro™) version 4

 

 
Targeted for the Oracle database, Tosska SQL Tuning Expert (TSE™) for Oracle® and Tosska SQL Tuning Expert Pro (TSE Pro™) for Oracle® are complete SQL tuning solutions that provide SQL syntax rewrite, Query Hints injection and index recommendation to maximize the performance of a SQL without compromise in any specific feature’s limitation.

They give users the ultimate SQL performance solution by just point and click without the need of user’s involvement. What you have to do is to input your problematic SQL statement into the product and press a button. You don’t have to do analysis, guessing or testing during the entire SQL tuning process. The improved SQL statement will be benchmarked with your original SQL statement side by side without suspicion.

World’s Leading A.I. SQL Rewrite technology for Oracle database
Tosska’s A.I. SQL Rewrite plus the A.I. Hints Injection Engine is the world’s leading machine SQL Tuning technology for Oracle database. It saves developer’s time to rewrite a problematic SQL by exploring the potenial best SQL syntax and hints injection that even an experienced developer cannot discover.

Plan Control feature to tune your SQL even if you don’t have the source code
Tosska SQL Tuning Expert Pro (TSE Pro™) also comes with an innovative Plan Control function that improves your SQL performance without touching your program source code. Users can even deploy different performance query plans for various sizes of production databases without the effort of keeping multiple versions of the program source, it is especially suitable for package application users who don’t own the source code of their applications. For application developers, a problematic SQL statement can be improved without going through the time-consuming unit test, integration test and program implementation required in software development cycle.

Intelligent Workload-Based Index Advisor
Apart from the intelligent SQL tuning features, a powerful indexes recommendation function is also provided in TSE Pro™ to help users to review and explore more potential indexes that are helpful but may be missing in current database schema.

It is an intelligent and cost-aware index advice engine that helps users to review their existing database schema if there are any new indexes which can help to improve a given SQL workload. The engine can handle up to thousands of SQL statements and give you a reasonable recommendation that even human experts cannot achieve.

Product feature comparison of TSE Pro™ and TSE™

View Details | Free Download – TSE™ / TSE Pro™ | Buy License – TSE™ / TSE Pro™

 

Tosska In-Memory Maestro (TIM™) for Oracle® automates the In-memory SQL optimization process and provide In-memory objects recommendations for a given SQL workload with our proprietary artificial intelligent engine.

Tosska In-memory Maestro (TIM™) also provides user friendly In-memory simulation function for user to virtually evaluate their in-memory table objects for one SQL or a given SQL workload captured from SGA or AWR without actually populating those table objects.





View Details | Download Free Trial | Buy License

Our Company

Tosska Technologies Limited is a young and energetic company that provides intelligent database tuning tools to help our customers to optimize their databases performance to the maximum within the current database and hardware limitation.

With the rapid changes of modern databases, database administrators and developers have to learn and manage new features provided by databases with short period of time, there is always a time gap between fully mastering new features and actually implementing the new features in production.

Our mission is to help users to smooth out the hurdle by our new technologies. Furthermore, Tosska is one of the very few companies in the world that focuses on using artificial intelligence technology to solve various database performance problems. It is our goal to help our customers to reduce their hardware investment; increase their database applications service level and free up their human resources for more strategic activities with our innovative technologies.

Tosska has a very strong technical team. Our CTO has over twenty year experiences in the Artificial Intelligent software development field supported by a development team with solid database management related software development experience in fortune 500 international corporations.

News


Click to view Tosska SQL Tuning Expert (TSES™) for SQL Server 1.0.5 Release Notes

SQL performance tuning

A database is a piece of software operating on a computer, which means it is dependent and likely to face the same limitations as other software present on that computer. In other words, it will only be able to process as much data as the hardware can handle.

One of the best ways to speed up queries is to perform SQL performance tuning. In this post, we will answer some of the most frequent questions involving databases and indexes.

What is Indexing in SQL Query Optimization?

Indexing is one of the first things you may have come across while learning the ropes of your database. It is a wonderful tool that enables users to enhance the efficiency of their database. However, bear in mind that not every database requires indexing, and not all indexes are helpful in SQL performance tuning.

Let’s learn more about indexing: what it is and how it helps in enhancing database performance.

How do Indexes Affect SQL Query Performance?

An Index can locate data swiftly without having to go through each row in the table. This saves plenty of time! 

Certain data columns are required before you can create an index. These are –

  • The Search Key which holds a duplicate of the primary key
  • The Data Reference which has a set of pointers

All of these constitute the structure of one index. To understand how an index works, let us take an example. Suppose you need to look for a bit of data in your database. Rather than scour every line yourself, you make the computer search each row till it locates the information. Remember that the search is bound to take much longer if the requisite information is located at the end. Fortunately, you have the option to sort alphabetically to shorten the length of such queries.

What are the Types of Database Indexes?

Database indexes are of two kinds –

Clustered indexes – These arrange data using the primary key. The reason behind using a clustered index is to make sure the primary key is saved in ascending order. This is the same order in which the table stores memory.

A clustered index is automatically created when the primary key is set, which helps in SQL tuning for Oracle in the long run as well.

Non-clustered indexes – A non-clustered index is a data structure that boosts data fetching speed. It is different from clustered indexes, as they are made by data analysts or developers.

When and How Should We Use Indexes?

Since indexes are intended to accelerate database performance, you should apply them whenever you think they can simplify the use of the database. Although smaller databases may not have several opportunities to use indexes, they are likely to see the benefits of indexing as they grow into larger databases. 

You can make sure your indexes keep performing well, if you test run a set of queries on your database first. Clock the time those queries take to execute and begin creating your indexes after that. Keep rerunning these ‘tests’ for continuous improvements.

Conclusion

Indexing has its challenges, the biggest one being determining the best ones for every table.

For instance, heaps require clustered indexes because searching for a record in a heap table is comparable to finding a needle in a haystack: it’s inefficient and time-consuming, thanks to the heap’s unordered structure.

On the other hand, locating data is simpler and faster from a table that contains a proper clustered index, just like finding a name in a list that’s alphabetically ordered. DBAs, therefore, recommend that every SQL table contains a proper clustered index. Now that you know how indexes work and how they can optimize database performance, you should be able to use them to reduce query times substantially. If you would like more tips on how to use indexing, or you need a SQL query optimization tool for your database, let our experts know!

This is the second blog in our two-part series to explain the best ways to optimize your database, which is best done by enhancing the SQL queries being used. Without much ado, let’s pick up where we left off –

Give Preference to WHERE, instead of HAVING (when defining filters)

A query is efficient when it saves resources by fetching only what’s needed from the database. According to the Order of Operations defined in SQL, WHERE queries are calculated before HAVING statements.

Therefore, it is advisable to give preference to WHERE over HAVING when the goal is to filter a query on the basis of conditions for greater efficiency. 

For instance, let us suppose a hundred sales have been made during the year 2019, and a user wishes to put in a query to determine what the number of sales was for the same time period. They may write something like this:

SELECT Clients.ClientID, Clients.Name, Count(Sales.SalesID)

FROM Clients

   INNER JOIN Sales

   ON Clients.ClientID = Sales.ClientID

GROUP BY Clients.ClientID, Clients.Name

HAVING Sales.LastSaleDate BETWEEN #1/1/2019# AND #12/31/2019#

This statement would return at least a thousand sales records from the Sales table, then filter these thousand records to find the hundred records generated in the year 2019, and lastly, tally the data in the dataset.

If we compare the above with the same instance using the WHERE clause instead, there is a limit placed on the number of records fetched:

SELECT Clients.ClientID, Clients.Name, Count(Sales.SalesID)

FROM Clients

  INNER JOIN Sales

  ON Clients.ClientID = Sales.CustomerID

WHERE Sales.LastSaleDate BETWEEN #1/1/2019# AND #12/31/2019#

GROUP BY Clients.ClientID, Clients.Name

This statement would return the hundred records from the year 2019, after which it would count the records in the dataset, thereby getting rid of the first step in the HAVING clause.

Keep wildcards strictly at the end of a statement

A wildcard creates the largest search possible when looking for plaintext information like names or designations. However, the wider a search, the less efficient it is, and a leading wildcard worsen the performance – particularly when it’s used with an ending wildcard.

That’s because the database has to find every single record that remotely matches the selected field. Take this query to fetch cities beginning with ‘Ch’, for instance:

SELECT Cities FROM Clients

WHERE Cities LIKE ‘%Ch%’

This statement will not just fetch the expected results of Chicago, Chester, and Chelsea, but will also return unintended results, like Richardson, Canal Winchester, and Cannon Beach.

A more productive statement would be:

SELECT Cities FROM Clients

WHERE Cities LIKE ‘Ch%’

This query will lead only to the expected results of Chicago, Chester, and Chelsea.

Use LIMIT to sample query results

The use of a LIMIT query will make sure the results of new SQL queries are relevant and desirable. As the name suggests, its function is to limit the quantity of records to the number mentioned, saving a lot of resources in the process.

Considering the 2019 sales query from above, let us suppose a limit of 15 records:

SELECT Clients.ClientID, Clients.Name, Count(Sales.SalesID)

FROM Clients

  INNER JOIN Sales

  ON Clients.ClientID = Sales.ClientID

WHERE Sales.LastSaleDate BETWEEN #1/1/2019# AND #12/31/2019#

GROUP BY Clients.ClientID, Clients.Name

LIMIT 15

The results will indicate if the data set is worth using or not.

Adjust Your Timing a Bit

If you’re looking to minimize the impact of your analytical queries on the production database, consult with an Oracle Database Administrator regarding the scheduling of your SQL queries so that they can be run during off-peak hours.

Specific hours when there are fewest concurrent users, generally in the middle of the night, should be chosen to run such resource consuming queries. If your SQL queries are more likely to include the following criteria, consider running it during off-peak timings:

  • Selecting from huge tables (where there are over a million records)
  • Queries with Cartesian or Cross Joins
  • Looping queries
  • SELECT DISTINCT queries
  • Subqueries that are nested
  • Search queries involving wildcards in long text or memo areas
  • Numerous schema statements

Query with Confidence!

Keeping these and other SQL tips into consideration will certainly enable you to construct efficient, smart queries that will operate swiftly and fetch your team the game-changing insights it needs.

SQL is probably the most popular and powerful means to handle data, but sometimes you need actionable advice to unleash its power and make the most of such a robust language.

In case you’re operating in the absence of a data warehouse or a segregated analytical database for assessment, you may be able to gain updated information only from the live production database.

However, optimization and tuning are very important while writing queries for an Oracle database, especially a production database. In this two-part series, we will cover eight of the most useful ways to supercharge your database by enhancing the SQL queries used.

Make Tuning Your SQL Queries Easy Using these Tips

Consider the following ways to improve the performance of your database –

Clarify the organization’s requirements first

There are certain practices that benefit not just the users optimizing SQL queries but also the organization in general, such as:

  • Determining relevant stakeholders
  • Concentrate on business implications
  • Structuralize the discussion for the ideal specifications
  • Ask the right questions (Who? What? Where? When? Why?)
  • Make the requirements as specific as possible, and confirm those with the stakeholders.

Limit the scope of the SELECT query

A majority of SQL professionals have a bad habit of using SELECT * as a shorthand and end up fetching all available information from a table. If the table in question has numerous rows and fields, this takes up a lot of Oracle database and SQL resources by returning plenty of unrequired data.

The use of the SELECT statement must be done in a way that makes the database fetch only the data required to fulfill the business requirements. Consider the following instance, where the organization’s requirements request postal addresses for clients –

The query SELECT * from Clients is inefficient as it might bring in other information also fed in the client table that isn’t needed here. Instead, a query like this would only fetch the data necessary as per the requirements.

SELECT Name, Address, City, State, Zip

FROM Clients

Refrain from Using SELECT DISTINCT

Eliminating redundant information from a query is easy with SELECT DISTINCT, which GROUPs certain fields in the statement to return distinct results. Achieving this goal, however, requires substantial processing power. Moreover, the grouping of data may not be accurate, which is why you must avoid using this ‘trick’ altogether.

Take this example, for instance –

SELECT DISTINCT Name, City, State

FROM Clients

This statement doesn’t account for several people in the same city or state having the same name. Common names like John or Jane will be grouped together, leading to an incorrect quantity of records. Bigger databases that contain numerous Johns and Janes will not benefit from this query.

In its place, try to use something like this –

SELECT Name, Address, City, State, Zip

FROM Customers

By increasing the fields, unique records will be fetched without the use of SELECT DISTINCT. The database also wouldn’t have to cluster any fields, and the result set would be accurate.

Use INNER JOIN to Make a Join, not WHERE

Some SQL professionals choose WHERE clauses for joining, like in the example below –

SELECT Clients.ClientID, Clients.Name, Sales.LastSaleDate

FROM Clients, Sales

WHERE Clients.ClientID = Sales.ClientID

This kind of join creates a Cartesian Join, also known as Cross Join or a Cartesian Product. It involves the creation of every potential combination of the variables. If we suppose the table in the above example contains a thousand clients with a thousand total sales, the statement would generate a million results in the first go, after which it would filter those results to fetch records where ClientID is correctly joined.

It’s an unnecessary waste of database resources since the database ends up doing over a hundred times more work than is actually needed. Moreover, Cartesian Joins are particularly cumbersome in large-scale databases because it is likely to fetch billions or trillions of results.

Therefore, it becomes essential to use something like an INNER JOIN instead, in order to avoid the creation of a Cartesian Join –

SELECT Clients.ClientID, Clients.Name, Sales.LastSaleDate

FROM Clients

   INNER JOIN Sales

   ON Clients.ClientID = Sales.ClientID

In this case, the database would only fetch a thousand records where ClientID matches. Certain DBMSs identify WHERE joins and run them as INNER JOINs on their own accord, which is why they won’t show any change in performance between a WHERE and INNER JOIN. 

Click to view Tosska SQL Tuning Expert Pro (TSE Pro™) 4.2.0 Release Notes

Click to view Tosska SQL Tuning Expert (TSE™) 4.2.0 Release Notes

Tosska SQL Tuning Expert for MySQL

Click to view Tosska SQL Tuning Expert (TSEM™) for MySQL 2.2.0 Release Notes

Click to view Tosska SQL Tuning Expert (TSE™) 4.1.0 Release Notes

Click to view Tosska SQL Tuning Expert Pro (TSE Pro™) 4.1.0 Release Notes

SQL statements or queries are designed to retrieve information from the database. A user can achieve the same results through optimization in SQL; using a tuned query is especially useful from an execution perspective. 

Tuning a database is a vital step in organizing and accessing the information in a database. Performance tuning in SQL requires streamlining and homogenizing the environment of a database and the files in it. This simplifies the way users access data in a big way. 

Why Companies Need to Consider Optimization in SQL

Several organizations own databases, but not all of them hire IT staff knowledgeable in the ways of optimization in SQL. Only professionals who have tuning skills and experience along with insider information about the working of databases should do this. 

In case your company has a database but it hasn’t undergone performance tuning, you might encounter inadequate responses to queries and face unnecessary complications when handling data. Don’t let your efficiency get affected because of something avoidable like this! 

Performance Tuning in SQL: What It Involves

Tasks related to performance tuning include optimization in SQL database, creating and managing indexes, and other related tasks to maintain or improve database performance. The goal of MySQL query optimization is to increase the speed and brevity of query responses and to simplify data retrieval. 

Let’s look at three major reasons why companies need to take performance tuning and seriously – 

1. To enhance the rate of data fetching options

If your database lacks optimization, then fetching data can get slower with increasing data loads. Optimizing queries enables users to create indexes and eradicate issues that may be slowing down data retrieval. After all, it can get quite frustrating for your employees to wait for the database to perform its operations, which can pass on to customers forced to wait for the same.

2. To refrain from coding loops

Making your database go through a coding loop is akin to hammering it repeatedly. That’s because the same query is executed several times when it is placed in a loop. However, once you remove the query from the loop, you will experience a definite surge in performance because the query is run only once rather than going through multiple iterations. 

3. To increase the performance of your SQL statements 

Query tuning in SQL includes changing previous query patterns and habits that were affecting the speed of data storage and retrieval. For example, the use of SELECT is reduced by opting for separate column declaration and eliminating correlated subqueries. Queries are also simplified by obviating temporary tables at times, aside from many other techniques of optimization in SQL

Your database will be able to manage much more data after the application of all these improvements as these will increase its efficiency, making it scalable as well. Once your database has scalability, it also overcomes lower performance and ensures user satisfaction in terms of experience. 
If you require professional tools to manage MySQL query optimization and tuning, then Tosska can help you. Tosska provides highly intuitive tools that can simplify query tuning beyond your imagination, and it does this with the help of innovative AI technologies. Contact us today to learn more about our range of query optimization products and services.