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

MySQL:अनुक्रमित होने के लिए बहुत लंबे कॉलम पर कुशल क्वेरी

असली मुद्दा शायद VARCHAR . का उपयोग करना है फिंगरप्रिंट कॉलम के लिए। Utf8 वर्ण एन्कोडिंग का उपयोग करते समय, MySQL "सबसे खराब स्थिति" को लागू करता है और प्रति वर्ण 3 बाइट्स की गणना करता है।

या तो इसे 1-बाइट एन्कोडिंग में बदलें (जैसे लैटिन1 कहें), या VARBINARY . का उपयोग करें इसके बजाय टाइप करें:

create table fingerprinted_entry 
( type varchar (128) not null, 
  fingerprint varbinary (512) not null,
  PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here

यदि आपको प्रति उपसर्ग 767 बाइट सीमा से आगे जाना है, तो आपको स्पष्ट रूप से करना होगा बताएं कि जब आप इंडेक्स बनाते हैं:

create table fingerprinted_entry 
( type varchar (128) not null, 
  fingerprint varbinary (2048) not null,              -- 2048 bytes
  PRIMARY KEY(type, fingerprint(767))) ENGINE InnoDB; -- only the first 767 bytes of fingerprint are stored in the index


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. REGEXP प्रदर्शन (LIKE और =के साथ तुलना करें)

  2. क्या Sphinx/MySQL के साथ एक साथ दो तालिकाओं से डेटा प्राप्त करने का कोई बेहतर तरीका है?

  3. mysql में किसी विशेष उपयोगकर्ता के कुल लॉगिन-लॉगआउट समय की गणना करना

  4. ORDER BY का उपयोग करते समय धीमी क्वेरी

  5. कोडनिर्देशक, mysql, select_max और एक और रिकॉर्ड डालने से पहले 1 जोड़ें