Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

बहुत सारी पंक्तियों को स्कैन करने से बचने के लिए MySQL क्वेरी को ऑप्टिमाइज़ करना

आपको क्या लगता है कि क्वेरी बड़ी संख्या में पंक्तियों की जांच करेगी?

क्वेरी बिल्कुल स्कैन होगी 30 UNIQUE . का उपयोग करके रिकॉर्ड tag (tag, article_id) , PRIMARY KEY . पर प्रत्येक रिकॉर्ड में लेख में शामिल हों और रुक जाओ।

ठीक यही आपकी योजना कहती है।

मैंने अभी-अभी यह परीक्षण स्क्रिप्ट बनाई है:

CREATE TABLE `article` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(60) NOT NULL,
  `time_stamp` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1000001 ;

CREATE TABLE `tag` (
  `tag` varchar(30) NOT NULL,
  `article_id` int(11) NOT NULL,
  UNIQUE KEY `tag` (`tag`,`article_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT
INTO    article
SELECT  id, CONCAT('Article ', id), UNIX_TIMESTAMP('2011-08-17' - INTERVAL id SECOND)
FROM    t_source;

INSERT
INTO    tag
SELECT  CASE fld WHEN 1 THEN CONCAT('tag', (id - 1) div 10 + 1) ELSE tag END AS tag, id
FROM    (
        SELECT  tag,
                id,
                FIELD(tag, 'Other', 'Acer', 'Sony', 'HP', 'Dell') AS fld,
                RAND(20110817) AS rnd
        FROM    (
                SELECT  'Other' AS tag
                UNION ALL
                SELECT  'Acer' AS tag
                UNION ALL
                SELECT  'Sony' AS tag
                UNION ALL
                SELECT  'HP' AS tag
                UNION ALL
                SELECT  'Dell' AS tag
                ) t
        JOIN    t_source
        ) q
WHERE   POWER(3, -fld) > rnd;

, जहां t_source 1M . के साथ एक टेबल है इसमें रिकॉर्ड करें, और अपनी क्वेरी चलाएँ:

SELECT  *
FROM    tag t
JOIN    article a
ON      a.id = t.article_id
WHERE   t.tag = 'acer'
ORDER BY
        t.article_id DESC
LIMIT 30;

यह तुरंत था।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL कुशलतापूर्वक सभी रिकॉर्ड को एक टेबल से दूसरी टेबल में कॉपी करता है

  2. प्रत्येक n रिकॉर्ड के लिए MySQL से SUM कैसे करें

  3. MySQL में LIMIT क्लॉज में वेरिएबल का उपयोग करना

  4. Percona 5.6 InnoDB समस्या अनुक्रमणिका का सही ढंग से उपयोग नहीं कर रही है

  5. डॉकर रिटर्न में MySQL सर्वर ने क्लाइंट के लिए अज्ञात प्रमाणीकरण विधि का अनुरोध किया