2013-03-07 3 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'이없는 (그리고 수 없습니다) 외부'SELECT' 액세스 할 수있는 전용 테이블'fb_catalog_indices'에 정의되어 – mvp

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 

팁 : 인덱스 사용을 강제하지 않으려 고 - 귀하의 경우, 그것은 아프게했다. 대신 적절한 색인을 만드십시오.