Slow DB query even after moving to Amazon RDS
I have almost 3 Million records and table is quite simple. the columns are indexed in the main table but still this query takes 5 minutes to execute in Mysql command line.
SELECT t1.*
FROM asins as t1
WHERE t1.Category LIKE 'Toy'
AND t1.SalesRank>=200
AND t1.SalesRank<=6000
AND t1.Price>=15
AND t1.Price<=40
AND t1.Title NOT LIKE '%lego%'
ORDER BY -SalesRank DESC
LIMIT 0,10;
10 rows in set (5 min 46.43 sec)
here is the Explain.
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
| 1 | SIMPLE | t1 | range | Category,SalesRank,SalesRankStockUpdated | SalesRankStockUpdated | 5 | NULL | 180934 | Using index condition; Using where; Using MRR; Using filesort |
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
I have just moved my DB to Amazon RDS ( 1GB RAM) and i am running the query via command line. My EC2 and database are in the same region.
- There is some thing going on with the table, I am running another
Cron that is selecting the values form the same table and updating
another table. Is that locking the database or some thing ?
The results are different,
what can i do to optimize it further.
any thoughts.
Table Structure
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
--
-- --------------------------------------------------------
--
-- Table structure for table `asins`
--
CREATE TABLE `asins` (
`Id` int(10) UNSIGNED NOT NULL,
`ASIN` char(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`sASIN` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`SalesRank` int(10) UNSIGNED DEFAULT NULL,
`TotalNew` int(11) DEFAULT NULL,
`Weight` float DEFAULT NULL,
`Category` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Title` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`ReviewsNum` int(10) UNSIGNED DEFAULT NULL,
`ReviewsAvgRating` decimal(2,0) DEFAULT NULL,
`Price` decimal(10,2) UNSIGNED DEFAULT NULL,
`Currency` enum('USD') COLLATE utf8mb4_unicode_ci DEFAULT 'USD',
`MonthlyCalculatedSales` int(10) UNSIGNED DEFAULT NULL,
`SmallImageURL` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`LargeImageURL` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Brand` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`BrowseNodeId` bigint(20) UNSIGNED DEFAULT NULL,
`Manufacturer` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`MerchantName` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Updated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`RankUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`ReviewsNumUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`StockUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`Created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`imagehash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`fetched_asins` tinyint(1) NOT NULL DEFAULT '0',
`monthly_cron` tinyint(4) NOT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT '0',
`Stock` int(10) UNSIGNED DEFAULT NULL,
`Priority` int(10) UNSIGNED NOT NULL DEFAULT '2',
`round2` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPRESSED;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `asins`
--
ALTER TABLE `asins`
ADD PRIMARY KEY (`Id`),
ADD UNIQUE KEY `ASIN` (`ASIN`),
ADD KEY `Category` (`Category`),
ADD KEY `Priority` (`Priority`),
ADD KEY `SalesRank` (`SalesRank`),
ADD KEY `Stock` (`Stock`),
ADD KEY `StockUpdated` (`StockUpdated`),
ADD KEY `RankUpdated` (`RankUpdated`),
ADD KEY `SalesRankStockUpdated` (`SalesRank`,`StockUpdated`) USING BTREE,
ADD KEY `fetched_asins` (`fetched_asins`),
ADD KEY `ReviewsNumUpdated` (`ReviewsNumUpdated`) USING BTREE,
ADD KEY `monthly_cron` (`monthly_cron`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `asins`
--
ALTER TABLE `asins`
MODIFY `Id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
mysql amazon-rds
bumped to the homepage by Community♦ 11 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
add a comment |
I have almost 3 Million records and table is quite simple. the columns are indexed in the main table but still this query takes 5 minutes to execute in Mysql command line.
SELECT t1.*
FROM asins as t1
WHERE t1.Category LIKE 'Toy'
AND t1.SalesRank>=200
AND t1.SalesRank<=6000
AND t1.Price>=15
AND t1.Price<=40
AND t1.Title NOT LIKE '%lego%'
ORDER BY -SalesRank DESC
LIMIT 0,10;
10 rows in set (5 min 46.43 sec)
here is the Explain.
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
| 1 | SIMPLE | t1 | range | Category,SalesRank,SalesRankStockUpdated | SalesRankStockUpdated | 5 | NULL | 180934 | Using index condition; Using where; Using MRR; Using filesort |
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
I have just moved my DB to Amazon RDS ( 1GB RAM) and i am running the query via command line. My EC2 and database are in the same region.
- There is some thing going on with the table, I am running another
Cron that is selecting the values form the same table and updating
another table. Is that locking the database or some thing ?
The results are different,
what can i do to optimize it further.
any thoughts.
Table Structure
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
--
-- --------------------------------------------------------
--
-- Table structure for table `asins`
--
CREATE TABLE `asins` (
`Id` int(10) UNSIGNED NOT NULL,
`ASIN` char(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`sASIN` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`SalesRank` int(10) UNSIGNED DEFAULT NULL,
`TotalNew` int(11) DEFAULT NULL,
`Weight` float DEFAULT NULL,
`Category` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Title` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`ReviewsNum` int(10) UNSIGNED DEFAULT NULL,
`ReviewsAvgRating` decimal(2,0) DEFAULT NULL,
`Price` decimal(10,2) UNSIGNED DEFAULT NULL,
`Currency` enum('USD') COLLATE utf8mb4_unicode_ci DEFAULT 'USD',
`MonthlyCalculatedSales` int(10) UNSIGNED DEFAULT NULL,
`SmallImageURL` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`LargeImageURL` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Brand` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`BrowseNodeId` bigint(20) UNSIGNED DEFAULT NULL,
`Manufacturer` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`MerchantName` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Updated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`RankUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`ReviewsNumUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`StockUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`Created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`imagehash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`fetched_asins` tinyint(1) NOT NULL DEFAULT '0',
`monthly_cron` tinyint(4) NOT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT '0',
`Stock` int(10) UNSIGNED DEFAULT NULL,
`Priority` int(10) UNSIGNED NOT NULL DEFAULT '2',
`round2` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPRESSED;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `asins`
--
ALTER TABLE `asins`
ADD PRIMARY KEY (`Id`),
ADD UNIQUE KEY `ASIN` (`ASIN`),
ADD KEY `Category` (`Category`),
ADD KEY `Priority` (`Priority`),
ADD KEY `SalesRank` (`SalesRank`),
ADD KEY `Stock` (`Stock`),
ADD KEY `StockUpdated` (`StockUpdated`),
ADD KEY `RankUpdated` (`RankUpdated`),
ADD KEY `SalesRankStockUpdated` (`SalesRank`,`StockUpdated`) USING BTREE,
ADD KEY `fetched_asins` (`fetched_asins`),
ADD KEY `ReviewsNumUpdated` (`ReviewsNumUpdated`) USING BTREE,
ADD KEY `monthly_cron` (`monthly_cron`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `asins`
--
ALTER TABLE `asins`
MODIFY `Id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
mysql amazon-rds
bumped to the homepage by Community♦ 11 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
1
ORDER BY -SalesRank DESC
? Does this meanORDER BY SalesRank ASC
? If so, write it that way and see what happens.
– Michael - sqlbot
Mar 9 '17 at 8:55
no effect "1000 rows in set (5 min 40.58 sec)" :(
– rsn
Mar 9 '17 at 9:47
please attach table structure, also - how many records total returned? if change SELECT t1.* for SELECT count(*)?
– a_vlad
Mar 9 '17 at 10:37
updated the question. The total as u said was returned as :1042
– rsn
Mar 9 '17 at 10:44
add a comment |
I have almost 3 Million records and table is quite simple. the columns are indexed in the main table but still this query takes 5 minutes to execute in Mysql command line.
SELECT t1.*
FROM asins as t1
WHERE t1.Category LIKE 'Toy'
AND t1.SalesRank>=200
AND t1.SalesRank<=6000
AND t1.Price>=15
AND t1.Price<=40
AND t1.Title NOT LIKE '%lego%'
ORDER BY -SalesRank DESC
LIMIT 0,10;
10 rows in set (5 min 46.43 sec)
here is the Explain.
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
| 1 | SIMPLE | t1 | range | Category,SalesRank,SalesRankStockUpdated | SalesRankStockUpdated | 5 | NULL | 180934 | Using index condition; Using where; Using MRR; Using filesort |
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
I have just moved my DB to Amazon RDS ( 1GB RAM) and i am running the query via command line. My EC2 and database are in the same region.
- There is some thing going on with the table, I am running another
Cron that is selecting the values form the same table and updating
another table. Is that locking the database or some thing ?
The results are different,
what can i do to optimize it further.
any thoughts.
Table Structure
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
--
-- --------------------------------------------------------
--
-- Table structure for table `asins`
--
CREATE TABLE `asins` (
`Id` int(10) UNSIGNED NOT NULL,
`ASIN` char(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`sASIN` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`SalesRank` int(10) UNSIGNED DEFAULT NULL,
`TotalNew` int(11) DEFAULT NULL,
`Weight` float DEFAULT NULL,
`Category` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Title` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`ReviewsNum` int(10) UNSIGNED DEFAULT NULL,
`ReviewsAvgRating` decimal(2,0) DEFAULT NULL,
`Price` decimal(10,2) UNSIGNED DEFAULT NULL,
`Currency` enum('USD') COLLATE utf8mb4_unicode_ci DEFAULT 'USD',
`MonthlyCalculatedSales` int(10) UNSIGNED DEFAULT NULL,
`SmallImageURL` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`LargeImageURL` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Brand` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`BrowseNodeId` bigint(20) UNSIGNED DEFAULT NULL,
`Manufacturer` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`MerchantName` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Updated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`RankUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`ReviewsNumUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`StockUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`Created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`imagehash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`fetched_asins` tinyint(1) NOT NULL DEFAULT '0',
`monthly_cron` tinyint(4) NOT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT '0',
`Stock` int(10) UNSIGNED DEFAULT NULL,
`Priority` int(10) UNSIGNED NOT NULL DEFAULT '2',
`round2` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPRESSED;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `asins`
--
ALTER TABLE `asins`
ADD PRIMARY KEY (`Id`),
ADD UNIQUE KEY `ASIN` (`ASIN`),
ADD KEY `Category` (`Category`),
ADD KEY `Priority` (`Priority`),
ADD KEY `SalesRank` (`SalesRank`),
ADD KEY `Stock` (`Stock`),
ADD KEY `StockUpdated` (`StockUpdated`),
ADD KEY `RankUpdated` (`RankUpdated`),
ADD KEY `SalesRankStockUpdated` (`SalesRank`,`StockUpdated`) USING BTREE,
ADD KEY `fetched_asins` (`fetched_asins`),
ADD KEY `ReviewsNumUpdated` (`ReviewsNumUpdated`) USING BTREE,
ADD KEY `monthly_cron` (`monthly_cron`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `asins`
--
ALTER TABLE `asins`
MODIFY `Id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
mysql amazon-rds
I have almost 3 Million records and table is quite simple. the columns are indexed in the main table but still this query takes 5 minutes to execute in Mysql command line.
SELECT t1.*
FROM asins as t1
WHERE t1.Category LIKE 'Toy'
AND t1.SalesRank>=200
AND t1.SalesRank<=6000
AND t1.Price>=15
AND t1.Price<=40
AND t1.Title NOT LIKE '%lego%'
ORDER BY -SalesRank DESC
LIMIT 0,10;
10 rows in set (5 min 46.43 sec)
here is the Explain.
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
| 1 | SIMPLE | t1 | range | Category,SalesRank,SalesRankStockUpdated | SalesRankStockUpdated | 5 | NULL | 180934 | Using index condition; Using where; Using MRR; Using filesort |
+----+-------------+-------+-------+------------------------------------------+-----------------------+---------+------+--------+---------------------------------------------------------------+
I have just moved my DB to Amazon RDS ( 1GB RAM) and i am running the query via command line. My EC2 and database are in the same region.
- There is some thing going on with the table, I am running another
Cron that is selecting the values form the same table and updating
another table. Is that locking the database or some thing ?
The results are different,
what can i do to optimize it further.
any thoughts.
Table Structure
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
--
-- --------------------------------------------------------
--
-- Table structure for table `asins`
--
CREATE TABLE `asins` (
`Id` int(10) UNSIGNED NOT NULL,
`ASIN` char(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`sASIN` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL,
`SalesRank` int(10) UNSIGNED DEFAULT NULL,
`TotalNew` int(11) DEFAULT NULL,
`Weight` float DEFAULT NULL,
`Category` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Title` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`ReviewsNum` int(10) UNSIGNED DEFAULT NULL,
`ReviewsAvgRating` decimal(2,0) DEFAULT NULL,
`Price` decimal(10,2) UNSIGNED DEFAULT NULL,
`Currency` enum('USD') COLLATE utf8mb4_unicode_ci DEFAULT 'USD',
`MonthlyCalculatedSales` int(10) UNSIGNED DEFAULT NULL,
`SmallImageURL` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`LargeImageURL` varchar(512) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Brand` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`BrowseNodeId` bigint(20) UNSIGNED DEFAULT NULL,
`Manufacturer` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`MerchantName` varchar(256) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`Updated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`RankUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`ReviewsNumUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`StockUpdated` timestamp NOT NULL DEFAULT '1970-01-01 00:00:01',
`Created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`imagehash` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`fetched_asins` tinyint(1) NOT NULL DEFAULT '0',
`monthly_cron` tinyint(4) NOT NULL,
`deleted` tinyint(1) NOT NULL DEFAULT '0',
`Stock` int(10) UNSIGNED DEFAULT NULL,
`Priority` int(10) UNSIGNED NOT NULL DEFAULT '2',
`round2` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPRESSED;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `asins`
--
ALTER TABLE `asins`
ADD PRIMARY KEY (`Id`),
ADD UNIQUE KEY `ASIN` (`ASIN`),
ADD KEY `Category` (`Category`),
ADD KEY `Priority` (`Priority`),
ADD KEY `SalesRank` (`SalesRank`),
ADD KEY `Stock` (`Stock`),
ADD KEY `StockUpdated` (`StockUpdated`),
ADD KEY `RankUpdated` (`RankUpdated`),
ADD KEY `SalesRankStockUpdated` (`SalesRank`,`StockUpdated`) USING BTREE,
ADD KEY `fetched_asins` (`fetched_asins`),
ADD KEY `ReviewsNumUpdated` (`ReviewsNumUpdated`) USING BTREE,
ADD KEY `monthly_cron` (`monthly_cron`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `asins`
--
ALTER TABLE `asins`
MODIFY `Id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
mysql amazon-rds
mysql amazon-rds
edited Mar 13 '17 at 5:03
Rick James
43k22259
43k22259
asked Mar 9 '17 at 7:02
rsnrsn
114
114
bumped to the homepage by Community♦ 11 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
bumped to the homepage by Community♦ 11 mins ago
This question has answers that may be good or bad; the system has marked it active so that they can be reviewed.
1
ORDER BY -SalesRank DESC
? Does this meanORDER BY SalesRank ASC
? If so, write it that way and see what happens.
– Michael - sqlbot
Mar 9 '17 at 8:55
no effect "1000 rows in set (5 min 40.58 sec)" :(
– rsn
Mar 9 '17 at 9:47
please attach table structure, also - how many records total returned? if change SELECT t1.* for SELECT count(*)?
– a_vlad
Mar 9 '17 at 10:37
updated the question. The total as u said was returned as :1042
– rsn
Mar 9 '17 at 10:44
add a comment |
1
ORDER BY -SalesRank DESC
? Does this meanORDER BY SalesRank ASC
? If so, write it that way and see what happens.
– Michael - sqlbot
Mar 9 '17 at 8:55
no effect "1000 rows in set (5 min 40.58 sec)" :(
– rsn
Mar 9 '17 at 9:47
please attach table structure, also - how many records total returned? if change SELECT t1.* for SELECT count(*)?
– a_vlad
Mar 9 '17 at 10:37
updated the question. The total as u said was returned as :1042
– rsn
Mar 9 '17 at 10:44
1
1
ORDER BY -SalesRank DESC
? Does this mean ORDER BY SalesRank ASC
? If so, write it that way and see what happens.– Michael - sqlbot
Mar 9 '17 at 8:55
ORDER BY -SalesRank DESC
? Does this mean ORDER BY SalesRank ASC
? If so, write it that way and see what happens.– Michael - sqlbot
Mar 9 '17 at 8:55
no effect "1000 rows in set (5 min 40.58 sec)" :(
– rsn
Mar 9 '17 at 9:47
no effect "1000 rows in set (5 min 40.58 sec)" :(
– rsn
Mar 9 '17 at 9:47
please attach table structure, also - how many records total returned? if change SELECT t1.* for SELECT count(*)?
– a_vlad
Mar 9 '17 at 10:37
please attach table structure, also - how many records total returned? if change SELECT t1.* for SELECT count(*)?
– a_vlad
Mar 9 '17 at 10:37
updated the question. The total as u said was returned as :1042
– rsn
Mar 9 '17 at 10:44
updated the question. The total as u said was returned as :1042
– rsn
Mar 9 '17 at 10:44
add a comment |
2 Answers
2
active
oldest
votes
- Since you are not using wildcards, replace
t1.Category LIKE 'Toy'
witht1.Category = 'Toy'
- Add an index over (Category, SalesRank, Price)
already i have many fields with Index. Is it a good practice to keep adding index for every field ?
– rsn
Mar 9 '17 at 11:28
No, since indexes slow down inserts, updates and deletes. Only create indexes that benefit the queries you use.
– Twinkles
Mar 9 '17 at 11:30
above fields are indexed already.. i am still looking for solution since days.. :(
– rsn
Mar 13 '17 at 6:56
1
A composite index (a.k.a. as multi-column index) is not the same as indexing columns one by one. Check dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html - I also agree with @RickJames that the columnPrice
in the index isn't probably going to help much (basically, because you request a range of SalesRank, not just a single value).
– joanolo
Mar 13 '17 at 8:29
On second thought I agree:Price
can be left out.
– Twinkles
Mar 13 '17 at 9:49
add a comment |
Change ORDER BY -SalesRank DESC
to ORDER BY SalesRank ASC
(so that an index can be used), and add this composite index:
INDEX(category, SalesRank)
(Adding on Price
will make the index bulkier, but not better.)
Also, don't use SELECT t1.*
unless you really need all the columns. Instead, spell out the desired columns. This will cut back on the bulkiness of the intermediate table, if one is used.
After making those changes, provide EXPLAIN SELECT ...
.
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "182"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f166641%2fslow-db-query-even-after-moving-to-amazon-rds%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
- Since you are not using wildcards, replace
t1.Category LIKE 'Toy'
witht1.Category = 'Toy'
- Add an index over (Category, SalesRank, Price)
already i have many fields with Index. Is it a good practice to keep adding index for every field ?
– rsn
Mar 9 '17 at 11:28
No, since indexes slow down inserts, updates and deletes. Only create indexes that benefit the queries you use.
– Twinkles
Mar 9 '17 at 11:30
above fields are indexed already.. i am still looking for solution since days.. :(
– rsn
Mar 13 '17 at 6:56
1
A composite index (a.k.a. as multi-column index) is not the same as indexing columns one by one. Check dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html - I also agree with @RickJames that the columnPrice
in the index isn't probably going to help much (basically, because you request a range of SalesRank, not just a single value).
– joanolo
Mar 13 '17 at 8:29
On second thought I agree:Price
can be left out.
– Twinkles
Mar 13 '17 at 9:49
add a comment |
- Since you are not using wildcards, replace
t1.Category LIKE 'Toy'
witht1.Category = 'Toy'
- Add an index over (Category, SalesRank, Price)
already i have many fields with Index. Is it a good practice to keep adding index for every field ?
– rsn
Mar 9 '17 at 11:28
No, since indexes slow down inserts, updates and deletes. Only create indexes that benefit the queries you use.
– Twinkles
Mar 9 '17 at 11:30
above fields are indexed already.. i am still looking for solution since days.. :(
– rsn
Mar 13 '17 at 6:56
1
A composite index (a.k.a. as multi-column index) is not the same as indexing columns one by one. Check dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html - I also agree with @RickJames that the columnPrice
in the index isn't probably going to help much (basically, because you request a range of SalesRank, not just a single value).
– joanolo
Mar 13 '17 at 8:29
On second thought I agree:Price
can be left out.
– Twinkles
Mar 13 '17 at 9:49
add a comment |
- Since you are not using wildcards, replace
t1.Category LIKE 'Toy'
witht1.Category = 'Toy'
- Add an index over (Category, SalesRank, Price)
- Since you are not using wildcards, replace
t1.Category LIKE 'Toy'
witht1.Category = 'Toy'
- Add an index over (Category, SalesRank, Price)
answered Mar 9 '17 at 11:16
TwinklesTwinkles
1,9461921
1,9461921
already i have many fields with Index. Is it a good practice to keep adding index for every field ?
– rsn
Mar 9 '17 at 11:28
No, since indexes slow down inserts, updates and deletes. Only create indexes that benefit the queries you use.
– Twinkles
Mar 9 '17 at 11:30
above fields are indexed already.. i am still looking for solution since days.. :(
– rsn
Mar 13 '17 at 6:56
1
A composite index (a.k.a. as multi-column index) is not the same as indexing columns one by one. Check dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html - I also agree with @RickJames that the columnPrice
in the index isn't probably going to help much (basically, because you request a range of SalesRank, not just a single value).
– joanolo
Mar 13 '17 at 8:29
On second thought I agree:Price
can be left out.
– Twinkles
Mar 13 '17 at 9:49
add a comment |
already i have many fields with Index. Is it a good practice to keep adding index for every field ?
– rsn
Mar 9 '17 at 11:28
No, since indexes slow down inserts, updates and deletes. Only create indexes that benefit the queries you use.
– Twinkles
Mar 9 '17 at 11:30
above fields are indexed already.. i am still looking for solution since days.. :(
– rsn
Mar 13 '17 at 6:56
1
A composite index (a.k.a. as multi-column index) is not the same as indexing columns one by one. Check dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html - I also agree with @RickJames that the columnPrice
in the index isn't probably going to help much (basically, because you request a range of SalesRank, not just a single value).
– joanolo
Mar 13 '17 at 8:29
On second thought I agree:Price
can be left out.
– Twinkles
Mar 13 '17 at 9:49
already i have many fields with Index. Is it a good practice to keep adding index for every field ?
– rsn
Mar 9 '17 at 11:28
already i have many fields with Index. Is it a good practice to keep adding index for every field ?
– rsn
Mar 9 '17 at 11:28
No, since indexes slow down inserts, updates and deletes. Only create indexes that benefit the queries you use.
– Twinkles
Mar 9 '17 at 11:30
No, since indexes slow down inserts, updates and deletes. Only create indexes that benefit the queries you use.
– Twinkles
Mar 9 '17 at 11:30
above fields are indexed already.. i am still looking for solution since days.. :(
– rsn
Mar 13 '17 at 6:56
above fields are indexed already.. i am still looking for solution since days.. :(
– rsn
Mar 13 '17 at 6:56
1
1
A composite index (a.k.a. as multi-column index) is not the same as indexing columns one by one. Check dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html - I also agree with @RickJames that the column
Price
in the index isn't probably going to help much (basically, because you request a range of SalesRank, not just a single value).– joanolo
Mar 13 '17 at 8:29
A composite index (a.k.a. as multi-column index) is not the same as indexing columns one by one. Check dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html - I also agree with @RickJames that the column
Price
in the index isn't probably going to help much (basically, because you request a range of SalesRank, not just a single value).– joanolo
Mar 13 '17 at 8:29
On second thought I agree:
Price
can be left out.– Twinkles
Mar 13 '17 at 9:49
On second thought I agree:
Price
can be left out.– Twinkles
Mar 13 '17 at 9:49
add a comment |
Change ORDER BY -SalesRank DESC
to ORDER BY SalesRank ASC
(so that an index can be used), and add this composite index:
INDEX(category, SalesRank)
(Adding on Price
will make the index bulkier, but not better.)
Also, don't use SELECT t1.*
unless you really need all the columns. Instead, spell out the desired columns. This will cut back on the bulkiness of the intermediate table, if one is used.
After making those changes, provide EXPLAIN SELECT ...
.
add a comment |
Change ORDER BY -SalesRank DESC
to ORDER BY SalesRank ASC
(so that an index can be used), and add this composite index:
INDEX(category, SalesRank)
(Adding on Price
will make the index bulkier, but not better.)
Also, don't use SELECT t1.*
unless you really need all the columns. Instead, spell out the desired columns. This will cut back on the bulkiness of the intermediate table, if one is used.
After making those changes, provide EXPLAIN SELECT ...
.
add a comment |
Change ORDER BY -SalesRank DESC
to ORDER BY SalesRank ASC
(so that an index can be used), and add this composite index:
INDEX(category, SalesRank)
(Adding on Price
will make the index bulkier, but not better.)
Also, don't use SELECT t1.*
unless you really need all the columns. Instead, spell out the desired columns. This will cut back on the bulkiness of the intermediate table, if one is used.
After making those changes, provide EXPLAIN SELECT ...
.
Change ORDER BY -SalesRank DESC
to ORDER BY SalesRank ASC
(so that an index can be used), and add this composite index:
INDEX(category, SalesRank)
(Adding on Price
will make the index bulkier, but not better.)
Also, don't use SELECT t1.*
unless you really need all the columns. Instead, spell out the desired columns. This will cut back on the bulkiness of the intermediate table, if one is used.
After making those changes, provide EXPLAIN SELECT ...
.
answered Mar 13 '17 at 5:10
Rick JamesRick James
43k22259
43k22259
add a comment |
add a comment |
Thanks for contributing an answer to Database Administrators Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fdba.stackexchange.com%2fquestions%2f166641%2fslow-db-query-even-after-moving-to-amazon-rds%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
ORDER BY -SalesRank DESC
? Does this meanORDER BY SalesRank ASC
? If so, write it that way and see what happens.– Michael - sqlbot
Mar 9 '17 at 8:55
no effect "1000 rows in set (5 min 40.58 sec)" :(
– rsn
Mar 9 '17 at 9:47
please attach table structure, also - how many records total returned? if change SELECT t1.* for SELECT count(*)?
– a_vlad
Mar 9 '17 at 10:37
updated the question. The total as u said was returned as :1042
– rsn
Mar 9 '17 at 10:44