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

देखने पर मैसकल इंडेक्स काम नहीं कर रहा है

आप किसी व्यू पर इंडेक्स नहीं बना सकते:http:/ /dev.mysql.com/doc/refman/5.7/hi/view-restrictions.html , इसलिए आपको उम्मीद करनी होगी कि सूचकांक का उपयोग किया जाता है। https://stackoverflow.com/a/7922711/3595565

समाधान

दस्तावेज़ीकरण के दूसरे भाग की टिप्पणियों में एक समाधान का उल्लेख किया गया है:https://dev.mysql.com/doc/refman/5.5/hi/create-view.html जिसमें आप एक रेगुलर टेबल बनाते हैं और अपना स्पेशलाइज्ड इंडेक्स सेट करते हैं और डेटा को व्यू से टेबल में लोड करते हैं।

LOCK TABLES materializedView WRITE; 
TRUNCATE materializedView; 
INSERT INTO materializedView SELECT * FROM regularView;
UNLOCK TABLES;

आपकी क्वेरी अनुक्रमणिका का उपयोग क्यों नहीं करती है?

UNION का उपयोग करते समय एक SELECT . में mysql डेटा को बचाने के लिए एक अस्थायी तालिका बनाता है। इस प्रकार एक दृश्य के रूप में आपकी अधिक जटिल क्वेरी के लिए एक 'शॉर्टकट' है, चयन को कॉल करते समय यह फिर से संघ को निष्पादित करेगा, एक अस्थायी तालिका का उपयोग करेगा ... डेटा को संसाधित करने के लिए आकर्षक एल्गोरिदम का उपयोग करें।

मैनुअल की दोबारा जांच:http://dev.mysql. com/doc/refman/5.7/hi/view-restrictions.html

निष्कर्ष :UNION आपकी क्वेरी में अनुक्रमणिका का उपयोग करने से दृश्य में बाधा उत्पन्न होती है।

स्रोत

एक ही समस्या के लिए mysql फोरम में प्रश्न उत्तर:

बगरेपोर्ट "सभी के लिए अस्थायी टेबल न बनाएं"

MySQL 5.7 में फिक्स्ड http:/ /dev.mysql.com/doc/relnotes/mysql/5.7/hi/news-5-7-3.html

प्रोफाइलर की जांच के लिए कुछ परीक्षण डेटा

CREATE TABLE test1 (
    id int auto_increment PRIMARY KEY,
  col1 varchar(50),
  col2 varchar(50)
);

CREATE TABLE test2 (
    id int auto_increment PRIMARY KEY,
  col1 varchar(50),
  col2 varchar(50)
);

INSERT INTO test1 (col1, col2) 
VALUES 
('test', 'testcol2'),
('test', 'testcol2'),
('test', 'testcol2'),
('test', 'testcol2'),
('test', 'testcol2'),
('test', 'testcol2');


INSERT INTO test2 (col1, col2) 
VALUES 
('test2', 'testcol2'),
('test2', 'testcol2'),
('test2', 'testcol2'),
('test2', 'testcol2'),
('test2', 'testcol2'),
('test2', 'testcol2');

CREATE VIEW testview AS
SELECT * FROM test1
UNION
SELECT * FROM test2;

प्रोफाइलर की जांच करें:

SET PROFILING = 1;
SELECT * FROM testview WHERE id = 1;
+----+-------+----------+
| id | col1  | col2     |
+----+-------+----------+
|  1 | test  | testcol2 |
|  1 | test2 | testcol2 |
+----+-------+----------+
SHOW PROFILE;
+--------------------------------+----------+
| Status                         | Duration |
+--------------------------------+----------+
| starting                       | 0.000017 |
| Waiting for query cache lock   | 0.000004 |
| checking query cache for query | 0.000029 |
| checking permissions           | 0.000006 |
| Opening tables                 | 0.000121 |
| System lock                    | 0.000012 |
| checking permissions           | 0.000014 |
| checking permissions           | 0.000032 |
| optimizing                     | 0.000004 |
| statistics                     | 0.000007 |
| preparing                      | 0.000006 |
| executing                      | 0.000003 |
| Sending data                   | 0.000046 |
| optimizing                     | 0.000003 |
| statistics                     | 0.000004 |
| preparing                      | 0.000003 |
| executing                      | 0.000002 |
| Sending data                   | 0.000023 |
| optimizing                     | 0.000003 |
| statistics                     | 0.000003 |
| preparing                      | 0.000003 |
| executing                      | 0.000002 |
| Sending data                   | 0.000008 |
| removing tmp table             | 0.000005 |
| Sending data                   | 0.000005 |
| Waiting for query cache lock   | 0.000002 |
| Sending data                   | 0.000024 |
| init                           | 0.000011 |
| optimizing                     | 0.000006 |
| statistics                     | 0.000004 |
| preparing                      | 0.000006 |
| executing                      | 0.000002 |
| Sending data                   | 0.000021 |
| end                            | 0.000003 |
| query end                      | 0.000004 |
| closing tables                 | 0.000002 |
| removing tmp table             | 0.000004 |
| closing tables                 | 0.000006 |
| freeing items                  | 0.000005 |
| Waiting for query cache lock   | 0.000003 |
| freeing items                  | 0.000013 |
| Waiting for query cache lock   | 0.000002 |
| freeing items                  | 0.000002 |
| storing result in query cache  | 0.000003 |
| logging slow query             | 0.000002 |
| cleaning up                    | 0.000003 |
+--------------------------------+----------+

मैं प्रोफ़ाइल से बहुत अधिक जानकारी नहीं ले सकता, लेकिन इसमें अस्थायी तालिका का उल्लेख है, मेरे निष्कर्ष को मान्य करने के लिए पर्याप्त (मेरे लिए)।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP में दूरस्थ MySQL कनेक्शन

  2. वर्डप्रेस पोस्ट मेटा के लिए कॉलम के रूप में पंक्तियों का चयन करें

  3. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:'कहां क्लॉज' में अज्ञात कॉलम 'स्मिथ'

  4. डेटाबेस में छवियों को कब स्टोर करें (mySQL) और कब नहीं? (डेटाबेस में आइटम को छवि से जोड़ना)

  5. PHP/MYSQL प्रति सदस्य केवल एक वोट की इजाजत देता है?