-1
  1. クエリが 4 秒以上実行されています。
  2. 1秒以内に結果が欲しい
  3. ここで私を助けてください。

クエリ:

SELECT a.index_id,
       title
FROM fb_indices a,
     fb_catalog_indices b FORCE INDEX (idx_1986)
WHERE a.index_id = b.index_id
  AND type = 'international'
  AND title IS NOT NULL

プランの説明:

mysql> explain select a.index_id,title from fb_indices a, fb_catalog_indices b force index (idx_1986) where a.index_id = b.index_id and type='international' and title is not NULL;
+----+-------------+-------+------+-----------------+----------+---------+----------------+------+-------------+
| id | select_type | table | type | possible_keys   | key      | key_len | ref            | rows | Extra       |
+----+-------------+-------+------+-----------------+----------+---------+----------------+------+-------------+
|  1 | SIMPLE      | a     | ref  | idx_836,idx_450 | idx_450  | 53      | const          |   79 | Using where |
|  1 | SIMPLE      | b     | ref  | idx_1986        | idx_1986 | 103     | cms.a.index_id |  590 | Using where |
+----+-------------+-------+------+-----------------+----------+---------+----------------+------+-------------+
2 rows in set (0.00 sec)

構造:

mysql> show create table fb_indices\G
*************************** 1. row ***************************
       Table: fb_indices
Create Table: CREATE TABLE `fb_indices` (
  `row_mod` datetime DEFAULT NULL,
  `row_create` datetime DEFAULT NULL,
  `index_id` varchar(100) COLLATE latin1_bin DEFAULT NULL,
  `description` varchar(255) COLLATE latin1_bin DEFAULT NULL,
  `country_id` varchar(2) COLLATE latin1_bin DEFAULT NULL,
  `index_level` int(11) DEFAULT NULL,
  `type` varchar(50) COLLATE latin1_bin DEFAULT NULL,
  `approval_flag` int(11) DEFAULT NULL,
  `username` varchar(255) COLLATE latin1_bin DEFAULT NULL,
  `search_product_type` int(11) DEFAULT NULL,
  `search_color` int(11) DEFAULT NULL,
  `search_price` int(11) DEFAULT NULL,
  UNIQUE KEY `idx_836` (`index_id`),
  KEY `idx_450` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin
1 row in set (0.00 sec)

mysql> show create table fb_catalog_indices\G
*************************** 1. row ***************************
       Table: fb_catalog_indices
Create Table: CREATE TABLE `fb_catalog_indices` (
  `row_mod` datetime DEFAULT NULL,
  `row_create` datetime DEFAULT NULL,
  `index_id` varchar(100) COLLATE latin1_bin DEFAULT NULL,
  `website_id` varchar(50) COLLATE latin1_bin DEFAULT NULL,
  `title` varchar(100) COLLATE latin1_bin DEFAULT NULL,
  `subheading` longtext COLLATE latin1_bin,
  `product_ids` longtext COLLATE latin1_bin,
  `sub_index_ids` longtext COLLATE latin1_bin,
  `mapped_index_ids` longtext COLLATE latin1_bin,
  `username` varchar(100) COLLATE latin1_bin DEFAULT NULL,
  `content` longtext COLLATE latin1_bin,
  `meta_description` longtext COLLATE latin1_bin,
  `meta_tag_keyword` longtext COLLATE latin1_bin,
  `mapped_link_text` longtext COLLATE latin1_bin,
  `mapped_alt_tags` longtext COLLATE latin1_bin,
  `long_title` varchar(255) COLLATE latin1_bin DEFAULT NULL,
  `html_content` longtext COLLATE latin1_bin,
  `use_html_content` int(11) DEFAULT '0',
  `flash_size` longtext COLLATE latin1_bin,
  `custom_index_ids` longtext COLLATE latin1_bin,
  `html_header_1` longtext COLLATE latin1_bin,
  `html_header_2` longtext COLLATE latin1_bin,
  `search_product_type` int(11) DEFAULT NULL,
  `search_color` int(11) DEFAULT NULL,
  `search_price` int(11) DEFAULT NULL,
  `disable_rankings` int(11) DEFAULT NULL,
  `html_footer_1` longtext COLLATE latin1_bin,
  `dramashot_html` longtext COLLATE latin1_bin,
  `quickshop_image` longtext COLLATE latin1_bin,
  `sort_by_price_css` longtext COLLATE latin1_bin,
  `pagination_css` longtext COLLATE latin1_bin,
  `suppress_navigation` int(11) DEFAULT NULL,
  `suppress_quickshop_image` int(11) DEFAULT NULL,
  `mvt_control_script` longtext COLLATE latin1_bin,
  `mvt_tracking_script` longtext COLLATE latin1_bin,
  `enable_gbb_mouse` int(11) DEFAULT NULL,
  `enable_gbb_click` int(11) DEFAULT NULL,
  `last_modified_time` datetime DEFAULT NULL,
  `seo_footer_content` longtext COLLATE latin1_bin,
  `alternate_gfi` int(11) DEFAULT NULL,
  `zip_finder_html_content` longtext COLLATE latin1_bin,
  `disable_quick_view_widget` int(11) DEFAULT NULL,
  `indexpromo_title` varchar(255) COLLATE latin1_bin DEFAULT NULL,
  `indexpromo_style` longtext COLLATE latin1_bin,
  `background_color` text COLLATE latin1_bin,
  `sameday_text` text COLLATE latin1_bin,
  `productdesc_text` text COLLATE latin1_bin,
  `productprice_text` text COLLATE latin1_bin,
  `gbbcatalog_text` text COLLATE latin1_bin,
  `max_products_display` int(11) DEFAULT NULL,
  UNIQUE KEY `idx_1986` (`index_id`,`website_id`),
  KEY `idx_1055` (`website_id`),
  KEY `idx_836` (`index_id`),
  KEY `idx_1812` (`last_modified_time`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_bin
1 row in set (0.00 sec)
4

2 に答える 2

1

次のインデックスを作成します。

CREATE INDEX idx_999 ON fb_indices (index_id, type);

その後、このクエリはあなたのものと同等であり、高速に動作するはずです:

SELECT a.index_id,
       b.title
FROM fb_indices a
JOIN fb_catalog_indices b ON (a.index_id = b.index_id)
WHERE a.type = 'international'
  AND b.title IS NOT NULL

ヒント: インデックスの使用を強制しないようにしてください - あなたの場合、それは苦痛でした。代わりに、適切なインデックスを作成してください。

于 2013-03-07T09:02:16.947 に答える
0
SELECT a.index_id,
       title
FROM fb_indices a,
     (
        SELECT 
            index_id 
        FROM 
            fb_catalog_indices 
        WHERE  
            type = 'international'
     ) as b 
WHERE a.index_id = b.index_id
  AND title IS NOT NULL
于 2013-03-07T09:05:56.827 に答える