मैं (मैं इस डिजाइन नहीं था) कैसे MySQL में एक बहुत ही धीमी गति से क्वेरी अनुकूलन करने के लिए यह पता लगाने की कोशिश कर रहा हूँ के साथ:"COUNT का चयन करें (*)" धीमी है, यहां तक कि जहां खंड
SELECT COUNT(*) FROM change_event me WHERE change_event_id > '1212281603783391';
+----------+
| COUNT(*) |
+----------+
| 3224022 |
+----------+
1 row in set (1 min 0.16 sec)
तुलना है कि एक पूर्ण गिनती के लिए:
select count(*) from change_event;
+----------+
| count(*) |
+----------+
| 6069102 |
+----------+
1 row in set (4.21 sec)
बयान की व्याख्या मुझे यहाँ मदद नहीं करता है:
explain SELECT COUNT(*) FROM change_event me WHERE change_event_id > '1212281603783391'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: me
type: range
possible_keys: PRIMARY
key: PRIMARY
key_len: 8
ref: NULL
rows: 4120213
Extra: Using where; Using index
1 row in set (0.00 sec)
ठीक है, यह अभी भी सोचता है कि यह मोटे तौर पर 4 लाख प्रविष्टियों की जरूरत है गिनती करने के लिए, बू मैं उस फ़ाइल से लाइनों को तेज़ी से गिन सकता हूं! मुझे समझ में नहीं आता क्यों MySQL यह लंबा ले रहा है।
यहाँ तालिका परिभाषा है:
CREATE TABLE `change_event` (
`change_event_id` bigint(20) NOT NULL default '0',
`timestamp` datetime NOT NULL,
`change_type` enum('create','update','delete','noop') default NULL,
`changed_object_type` enum('Brand','Broadcast','Episode','OnDemand') NOT NULL,
`changed_object_id` varchar(255) default NULL,
`changed_object_modified` datetime NOT NULL default '1000-01-01 00:00:00',
`modified` datetime NOT NULL default '1000-01-01 00:00:00',
`created` datetime NOT NULL default '1000-01-01 00:00:00',
`pid` char(15) default NULL,
`episode_pid` char(15) default NULL,
`import_id` int(11) NOT NULL,
`status` enum('success','failure') NOT NULL,
`xml_diff` text,
`node_digest` char(32) default NULL,
PRIMARY KEY (`change_event_id`),
KEY `idx_change_events_changed_object_id` (`changed_object_id`),
KEY `idx_change_events_episode_pid` (`episode_pid`),
KEY `fk_import_id` (`import_id`),
KEY `idx_change_event_timestamp_ce_id` (`timestamp`,`change_event_id`),
KEY `idx_change_event_status` (`status`),
CONSTRAINT `fk_change_event_import` FOREIGN KEY (`import_id`) REFERENCES `import` (`import_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
संस्करण:
$ mysql --version
mysql Ver 14.12 Distrib 5.0.37, for pc-solaris2.8 (i386) using readline 5.0
वहाँ कुछ स्पष्ट मैं याद कर रहा हूँ है? (हां, मैंने पहले ही "SELECT COUNT (change_event_id)" का प्रयास किया है, लेकिन इसमें कोई प्रदर्शन अंतर नहीं है)।
अगर आप कुछ ऐसा करने की कोशिश करते हैं तो कैसे ... चुनें COUNT (*) परिवर्तन से मुझे बदलें_event_id> 0; क्या यह प्रदर्शन को प्रभावित करता है? –
ओविड - यदि आप सक्षम हैं, तो कृपया 'SHOW INDEX FROM change_event' के आउटपुट को जोड़ें – Alnitak