2013-03-07 30 views
-1
  1. 我的查詢運行時間超過4秒。
  2. 我想在不到1秒的時間內結果
  3. 幫我這裏。

查詢:我的查詢運行時間超過4秒鐘幫助我在這裏得到結果,少於1秒

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) 

回答

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 
+0

這個答案不可能是正確的 - 'title'只在表'fb_catalog_indices'中定義,它不是(也不能)被外層的'SELECT'訪問 – mvp 2013-03-07 09:43:32

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 

提示:儘量不要強行使用索引 - 你的情況,這是傷害。相反,請創建一個適當的索引。

相關問題