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

सबस्ट्रिंग वाली पंक्तियों की खोज कैसे करें?

ठीक है, आप हमेशा कोशिश कर सकते हैं WHERE textcolumn LIKE "%SUBSTRING%" - लेकिन यह बहुत धीमा होने की गारंटी है, क्योंकि आपकी क्वेरी एक इंडेक्स मैच नहीं कर सकती क्योंकि आप बाईं ओर के पात्रों की तलाश कर रहे हैं।

यह फ़ील्ड प्रकार पर निर्भर करता है - एक टेक्स्ट क्षेत्र आमतौर पर VARCHAR के रूप में सहेजा नहीं जाएगा, बल्कि (एक प्रकार का) टेक्स्ट फ़ील्ड के रूप में सहेजा जाएगा, ताकि आप खिलाफ मिलान करें ऑपरेटर।

मेल नहीं खाने वाले कॉलम प्राप्त करने के लिए, बस इस तरह के सामने NOT डालें:WHERE textcolumn NOT LIKE "%SUBSTRING%"

खोज केस-संवेदी है या नहीं यह इस बात पर निर्भर करता है कि आप डेटा को कैसे स्टॉक करते हैं, विशेष रूप से आप किस COLLATION का उपयोग करते हैं। डिफ़ॉल्ट रूप से, खोज केस-संवेदी होगी।

प्रश्न अद्यतन को दर्शाने के लिए अद्यतन उत्तर:

मैं कहता हूं कि WHERE field LIKE "%value%" . करना WHERE field LIKE "value%" . से धीमी है यदि कॉलम फ़ील्ड में एक अनुक्रमणिका है, लेकिन यह अभी भी सभी मान प्राप्त करने और आपके एप्लिकेशन फ़िल्टर होने से काफी तेज़ है। दोनों परिदृश्य:

1/ यदि आप SELECT field FROM table WHERE field LIKE "%value%" . है , MySQL पूरी तालिका को स्कैन करेगा, और केवल "मान" वाली फ़ील्ड भेजेगा।

2/ यदि आप SELECT field FROM table . करते हैं और फिर अपने आवेदन (आपके मामले में PHP) में केवल "मान" वाली पंक्तियों को फ़िल्टर करें, MySQL पूरी तालिका को भी स्कैन करेगा, लेकिन सभी फ़ील्ड को PHP को भेज देगा, जिसे तब अतिरिक्त काम करना होगा। यह केस #1 की तुलना में बहुत धीमा है।

समाधान:कृपया WHERE . का उपयोग करें खंड, और उपयोग करें EXPLAIN प्रदर्शन देखने के लिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लारवेल स्काउट और अल्गोलिया के साथ बहु-भाषा अनुक्रमणिका

  2. एक MySQL अद्यतन कथन में प्रभावित पंक्तियों की संख्या प्राप्त करें?

  3. एक दिन में काम करने के कुल घंटे पाएं mysql

  4. चयन में 2 टेबल में शामिल होना (MYSQL/PHP)

  5. MySQL और MariaDB के लिए डेटाबेस की उच्च उपलब्धता का परिचय