2016-08-06 6 views
2

私は、次のクエリは、私のmysqlのスロークエリログに表示があります。なぜこれらのクエリは時間がかかりますか?それを修正するには?

SELECT Count(*) AS aggregate 
FROM `posts` 
     INNER JOIN `post_stats` 
       ON `posts`.`id` = `post_stats`.`post_id` 
WHERE `posts`.`group_id` IN ('1', '2', '20', '21', 
            '22', '25', '23', '53', 
            '24', '3', '16', '64', 
            '10', '4', '5', '7', 
            '26', '28', '27', '32', 
            '29', '30', '31', '36', 
            '68', '65', '54', '37', 
            '38', '67', '45', '33', 
            '34', '39', '35', '69', 
            '46', '55', '66', '44', 
            '47', '6', '49', '50', 
            '59', '57', '56', '58', '9'); 

クエリが完了するまでにほぼ3秒かかります。

SELECT * 
FROM `post_shares` 
WHERE `post_shares`.`post_id` IN ('127867', '127784', '127454', '127473' 
              , 
              '127465', '127870', '127871', '127444' 
              , 
              '127866', '127872', '127865', '127468' 
              , 
              '127463', '127451', '127464', '127442' 
              , 
              '127489', '127479', '127863', '127487' 
              , 
              '127697', '127457', '127859', '127472' 
              , 
              '127579', '127856', '127452', '127862' 
              , 
              '127429', '127422', '127475', '127854' 
              , 
              '127518', '127431', '127852', '127405' 
              , 
              '127853', '127850', '127402', '127846' 
              , 
              '127520', '127838', '127437', '127839' 
              , 
              '127421', '127390', '127842', '127388' 
              , 
              '127837', '127396', '127851', '127822' 
              , 
              '127364', '127363', '127362', '127361' 
              , 
              '127828', '127825', '127820', '127387' 
              , 
              '127408', '127354', '127380', '127458' 
              , 
              '127353', '127453', '127344', '127910' 
              , 
              '127395', '127372', '127832', '127346' 
              , 
              '127805', '127812', '127342', '127352' 
              , 
              '127334', '127332', '127804', '127330' 
              , 
              '127407', '127373', '127333', '127830' 
              , 
              '127798', '127350', '127300', '127801' 
              , 
              '127283', '127308', '127351', '127292' 
              , 
              '127322', '127303', '127459', '127793' 
              , 
              '127280', '127274', '127312', '127271' 
              , 
              '127278', '127313', '127796', '127277' 
              , 
              '127302', '127262', '127284', '127969' 
              , 
              '127964', '127323', '127790', '127782' 
              , 
              '127252', '127282', '127844', '127777' 
              , 
              '127249', '127275', '127776', '127238' 
              , 
              '127772', '127263', '127254', '127233' 
              , 
              '127795', '127773', '127251', '127217' 
              , 
              '127216', '127215', '127774', '127768' 
              , 
              '127205', '127218', '127270', '127241' 
              , 
              '127197', '127210', '127767', '127450' 
              , 
              '127759', '127946', '127219', '127189' 
              , 
              '127755', '127220', '127756', '127221' 
              , 
              '127231', '127195', '127309', '127204' 
              , 
              '127196', '127172', '127255', '127714' 
              , 
              '127183', '127174', '127184', '127928' 
              , 
              '127927', '127754', '127160', '127168' 
              , 
              '127147', '127171', '127747', '127750' 
              , 
              '127132', '127131', '127130', '127746' 
              , 
              '127122', '127161', '127153', '127741' 
              , 
              '127749', '127169', '127110', '127108' 
              , 
              '127762', '127106', '127102', '127109' 
              , 
              '127737', '127096', '127185', '127094' 
              , 
              '127734', '127116', '127133', '127100' 
              , 
              '127150', '127087', '127222', '127158' 
              , 
              '127085', '127117', '127720', '127717' 
              , 
              '127206', '127912', '127619', '127726' 
              , 
              '127709', '127710', '127430', '127708' 
              , 
              '127056', '127295', '127250', '127223' 
              , 
              '127055', '127066', '127057', '127048' 
              , 
              '127068', '127054', '127712', '127107' 
              , 
              '127701', '127043', '127340', '127591' 
              , 
              '127692', '127065', '127038', '127698' 
              , 
              '127693', '127078', '127691', '127029' 
              , 
              '127028', '127694', '127075', '127051' 
              , 
              '127695', '127134', '127592', '127301' 
              , 
              '127040', '127763', '127683', '127730' 
              , 
              '127020', '127019', '127632', '127684' 
              , 
              '127725', '127679', '127093', '127568' 
              , 
              '127685', '127675', '127013', '127031' 
              , 
              '127010', '127681', '127009', '127032' 
              , 
              '127006', '127194', '127002', '127005' 
              , 
              '127001', '127016', '127668', '127033' 
              , 
              '126996', '127324', '127686', '127662' 
              , 
              '126989', '127669', '127670', '127672' 
              , 
              '127674', '127030', '126987', '127656' 
              , 
              '126985', '126981', '127643', '127657' 
              , 
              '127014', '126991', '127764', '127671' 
              , 
              '127493', '127637', '127638', '127076' 
              , 
              '126968', '126961', '127651', '127658' 
              , 
              '127649', '127646', '127214', '126967' 
              , 
              '126962', '127624', '127620', '127008' 
              , 
              '127650', '126963', '126955', '126954' 
              , 
              '127041', '126976', '127256', '127621' 
              , 
              '126933', '126995', '126931', '127612' 
              , 
              '126948', '127613', '126940', '127622' 
              , 
              '126935', '126928', '126993', '127602' 
              , 
              '127601', '127604', '127607', '126964' 
              , 
              '127126', '126980', '126950', '126986' 
              , 
              '126918', '126917', '127595', '126915' 
              , 
              '126924', '127593', '127052', '127460' 
              , 
              '127061', '127611', '127118', '127608' 
              , 
              '127585', '126974', '127571', '127569' 
              , 
              '127597', '126904', '127598', '127596' 
              , 
              '127890', '126949', '126903', '127594' 
              , 
              '126938', '126890', '127583', '126892' 
              , 
              '127580', '127600', '126888', '127551' 
              , 
              '127552', '127572', '127558', '127573' 
              , 
              '127829', '127821', '126916', '127537' 
              , 
              '126934', '127553', '126881', '127538' 
              , 
              '127296', '127127', '127539', '127561' 
              , 
              '127567', '126870', '127581', '126979' 
              , 
              '126871', '126887', '126878', '127574' 
              , 
              '127584', '126893', '126864', '126977' 
              , 
              '126896', '126880', '126879', '127532' 
              , 
              '126911', '126858', '126856', '126994' 
              , 
              '127528', '126978', '127625', '127521' 
              , 
              '127128', '127529', '126872', '127073' 
              , 
              '127819', '127818', '127817', '126850' 
              , 
              '127542', '127543', '127509', '127544' 
              , 
              '127524', '127515', '126845', '127504' 
              , 
              '126883', '127526', '127512', '127517' 
              , 
              '127510', '127564', '127554', '126877' 
              , 
              '127506', '127531', '126836', '126848' 
              , 
              '127497', '127511', '127502', '127522' 
              , 
              '127507', '127505', '126843', '127498' 
              , 
              '126969', '127503', '127499', '126897' 
              , 
              '126842', '126829', '126827', '127486' 
              , 
              '126898', '127500', '126852', '126822' 
              , 
              '127477', '127495', '127470', '126837' 
              , 
              '127476', '127491', '127480', '126814' 
              , 
              '126925', '126810', '126809', '126804' 
              , 
              '126803', '127095', '127516', '127496' 
              , 
              '127481', '127461', '126835', '126788' 
              , 
              '126851', '126899', '126900', '127570' 
              , 
              '127513', '127485', '127007', '126777' 
              , 
              '126794', '127478', '127471', '126841' 
              , 
              '126771', '127456', '127462', '127482' 
              , 
              '127440', '127492', '126768', '126767' 
              , 
              '126819', '126975', '126901', '126823' 
              , 
              '126790', '126849', '126761', '127455' 
              , 
              '126785', '126772', '126765', '126825' 
              , 
              '126749', '126748', '127433', '126753' 
              , 
              '126780', '126752', '126781', '126801' 
              , 
              '127434', '126779', '127443', '126745' 
              , 
              '126815', '127447', '127441', '126737' 
              , 
              '127426', '127427', '126744', '126926' 
              , 
              '127417', '126769', '126927', '127438' 
              , 
              '126770', '126715', '126714', '127419' 
              , 
              '126718', '126735', '127425', '126958' 
              , 
              '126724', '127063', '127062', '126758' 
              , 
              '127406', '127420', '127428', '127416' 
              , 
              '127423', '127432', '126736', '127414' 
              , 
              '127404', '127415', '127410', '127424' 
              , 
              '127775', '126951', '127397', '126687' 
              , 
              '127615', '127413', '126677', '126747' 
              , 
              '126672', '126671', '126668', '126679' 
              , 
              '127401', '127399', '126816', '127369' 
              , 
              '126662', '126701', '127398', '126784' 
              , 
              '127411', '127394', '126694', '126711' 
              , 
              '127382', '126824', '127374', '126678' 
              , 
              '126654', '126653', '126695', '126650' 
              , 
              '126676', '127392', '127631', '126696' 
              , 
              '127384', '126643', '126642', '127359' 
              , 
              '127370', '126708', '127371', '127348' 
              , 
              '127129', '127379', '127385', '127349' 
              , 
              '127365', '127375', '127366', '127357' 
              , 
              '127345', '127367', '127368', '127376' 
              , 
              '127338', '127360', '127358', '126644' 
              , 
              '127339', '127386', '127343', '126670' 
              , 
              '126634', '127337', '126630', '127377' 
              , 
              '127347', '126667', '127335', '126638' 
              , 
              '126604', '127341', '126623', '126697' 
              , 
              '127336', '127326', '126639', '126592' 
              , 
              '127327', '126640', '126581', '126675' 
              , 
              '127391', '127466', '126610', '126631' 
              , 
              '126586', '127314', '126568', '127315' 
              , 
              '126607', '127740', '126562', '127318' 
              , 
              '127317', '127115', '126618', '127307' 
              , 
              '127328', '126589', '126641', '127329' 
              , 
              '127320', '126569', '126577', '127304' 
              , 
              '126603', '127319', '126755', '127325' 
              , 
              '127321', '126549', '127293', '126567' 
              , 
              '127310', '126632', '127316', '126561' 
              , 
              '126560', '126698', '127299', '126578' 
              , 
              '126595', '127291', '127305', '127286' 
              , 
              '127285', '126699', '127306', '127279' 
              , 
              '127288', '127276', '127735', '127724' 
              , 
              '127289', '126530', '127381', '127267' 
              , 
              '126538', '126546', '126521', '127287' 
              , 
              '127261', '126518', '127259', '127290' 
              , 
              '126520', '126511', '127268', '126523' 
              , 
              '127266', '127265', '126689', '127273' 
              , 
              '127269', '127281', '127258', '126700' 
              , 
              '126496', '127253', '126517', '126628' 
              , 
              '127272', '126476', '126596', '126587' 
              , 
              '127248', '126828', '126472', '126738' 
              , 
              '126656', '126516', '127245', '127264' 
              , 
              '126524', '127239', '126466', '127247' 
              , 
              '127225', '126537', '127240', '127689' 
              , 
              '127232', '127235', '127234', '126457' 
              , 
              '127244', '127213', '127230', '127237' 
              , 
              '127297', '126448', '126525', '126462' 
              , 
              '127226', '126444', '126526', '127227' 
              , 
              '126458', '127246', '126471', '126438' 
              , 
              '126691', '126501', '127193', '127483' 
              , 
              '126436', '126445', '126442', '126441' 
              , 
              '126455', '126470', '127229', '127207' 
              , 
              '126488', '126443', '126454', '127224' 
              , 
              '127191', '126430', '127203', '126720' 
              , 
              '126719', '126504', '127209', '126423' 
              , 
              '126419', '126721', '127187', '126414' 
              , 
              '126739', '127211', '127186', '126439' 
              , 
              '127190', '126605', '126704', '127546' 
              , 
              '127228', '127173', '127200', '126398' 
              , 
              '126397', '126396', '126440', '126487' 
              , 
              '127163', '127167', '127198', '127175' 
              , 
              '127178', '126408', '126390', '127170' 
              , 
              '127182', '127177', '127188', '126424' 
              , 
              '126384', '127180', '126399', '127467' 
              , 
              '127547', '127164', '127199', '126372' 
              , 
              '126467', '126468') 
ORDER BY `created_at` DESC; 

を、彼らは時間がかかるのはなぜ:

同様に、このクエリを実行するためにほぼ5秒かかりますか?どうすればそれらをスピードアップできますか?

+0

通常、カウント(*)または '選択* 'は労働集約的です。あなたが望む 'column 'を知っているならば、その' column'を指定するだけです。 – KyloRen

+0

以下にたくさんの良い提案があります。 – Strawberry

+0

あなたの質問に編集し、あなたの質問に記載されているすべてのテーブルのための 'SHOW CREATE TABLE tablename'の結果を投稿してください。 –

答えて

2

潜在的に問題を引き起こす可能性のあるものはいくつかあります。

あなたは文字列として渡していますが、整数のフィルタリングをしようとしているようです。本当にそれを駄目にするべきではありませんでしたが、私は過去のintergersを文字列としてフィルタリングする際に奇妙な結果を得ました。

レコードの数だけを取得しているので、1つの列に限定して、データセット全体を渡してはいけません。

は、あなたが適切にインデックスが定義されている以下の

SELECT Count([UniqueColumn]) AS aggregate 
FROM `posts` 
     INNER JOIN `post_stats` 
       ON `posts`.`id` = `post_stats`.`post_id` 
WHERE `posts`.`group_id` IN ( 1, 2,  22, 25, 
            24, 3,  10, 4, 
            26, 28,  29, 30, 
            68, 65,  38, 67, 
            34, 39,  46, 55, 
            47, 6,  59, 57) 
1

チェックのようなものを試してみてください。

CREATE INDEX posts_id_group_id_index ON `posts` (`id`, `group_id`) 

と第二のために:あなたのようなインデックスを必要とする最初の要求のために特に

CREATE INDEX post_shares_post_id_index ON `post_shares`(`post_id`, `created_at`) 
+0

最初のインデックスは( 'group_id'、' id')でなければなりません。 'id'が主キーであれば(' group_id')だけです。 –

+0

@PaulSpiegel( 'id'、' group_id')と( 'group_id'、' id')の違いは何ですか? – user6680515

1

あなたがINを使用すると、条件は行ごとに一回テストする必要があります。 INの条件が小さい場合、これは大きな問題ではありませんが、そのような大きなセットを扱うときは、かなり遅くなる可能性があります。

私はあなたが2つのことを行うべきだと思う:

  1. はあなたがフィルタする列がインデックス化されていることを確認してください。
  2. 可能であれば、フィルタ条件として使用する値をテンポラリテーブルに入力し、インデックスを作成してからINNER JOINを使用してクエリを実行します。
1

ラージIN (...)リストは非常に遅いです。代わりに一連の範囲として記述してみてください:

SELECT Count(*) AS aggregate FROM (
    SELECT id FROM posts 
    WHERE group_id BETWEEN 1 AND 10 AND group_id != 8 
    UNION ALL 
    SELECT id FROM posts 
    WHERE group_id BETWEEN 20 AND 39 
    UNION ALL 
    SELECT id FROM posts 
    WHERE group_id BETWEEN 44 AND 50 AND group_id != 48 
    UNION ALL 
    SELECT id FROM posts 
    WHERE group_id BETWEEN 53 AND 59 
    UNION ALL 
    SELECT id FROM posts 
    WHERE group_id BETWEEN 64 AND 69 
    UNION ALL 
    SELECT id FROM posts 
    WHERE group_id = 16) ids 
JOIN post_stats ON ids.id = post_stats.post_id 
関連する問題