2016-05-22 11 views
5

हमारे पास उत्पाद जानकारी के साथ एक बड़ी तालिका है। लगभग हर समय हमें उन उत्पाद नामों को ढूंढने की आवश्यकता होती है जिनमें विशिष्ट शब्द होते हैं, लेकिन दुर्भाग्य से ये प्रश्न हमेशा चलाने के लिए लेते हैं।एक SQL LIKE क्वेरी प्रदर्शन में सुधार

उदाहरण: उन सभी उत्पादों को खोजें जहां नाम "स्टील" और "102" शब्द हैं (एक दूसरे के बगल में जरूरी नहीं है, इसलिए "निंजा स्टील आयरन 102 एक्स" जैसे उत्पाद एक मैच है, जैसे "ड्रैगन स्टील 102 बी "यह है)।

वर्तमान में हम इसे इस तरह से कर रहे हैं:

SELECT columns FROM products WHERE name LIKE '%WORD1%' AND name LIKE '%WORD2%' (जैसे शब्दों की संख्या सामान्य रूप से 2-4 हैं, लेकिन यह सिद्धांत में 7-8 या अधिक हो सकता है)।

क्या ऐसा करने का कोई तेज़ तरीका है?

हम केवल मिलान करने वाले शब्द हैं, इसलिए मुझे आश्चर्य है कि यह किसी भी तरह से मदद कर सकता है (यानी उपरोक्त उदाहरण में उत्पाद मिलान हैं, लेकिन "समुराई तलवार 150 वी" एक मैच नहीं है क्योंकि "स्टील" अकेले खड़ा नहीं है) ।

मेरा खुद का विचार उत्पाद नामों के शब्दों के साथ एक सहायक तालिका बनाना है और फिर मिलान करने वाले उत्पादों की आईडी प्राप्त करने के लिए उस तालिका का उपयोग करना है।

यानी एक मेज की तरह: [आईडी, शब्द, productid] तो हम उदाहरण के लिए मिलती है:

1, samurai, 3 
2, swordsteel, 3 
3, 102, 3 
4, v, 3 

बस है अगर वहाँ MySQL में यह करने के लिए रास्ते में एक निर्मित आश्चर्य है, इसलिए मैं नहीं है अपनी खुद की सामग्री को लागू करने के लिए + दो टेबल बनाए रखें।

धन्यवाद!

उत्तर

1

दुर्भाग्यवश, आपके पास पैटर्न नाम की शुरुआत में जंगली कार्ड हैं। इसलिए, MySQL इसके लिए मानक सूचकांक का उपयोग नहीं कर सकता है।

आपके पास दो विकल्प हैं। सबसे पहले, यदि शब्द वास्तव में कीवर्ड/विशेषताओं हैं, तो आपके पास एक पंक्ति प्रति पंक्ति के साथ एक और तालिका होनी चाहिए।

यदि ऐसा नहीं है, तो आप एक पूर्ण पाठ अनुक्रमणिका का प्रयास कर सकते हैं। ध्यान दें कि MySQL में न्यूनतम शब्दों की लंबाई के लिए विशेषता है और स्टॉप शब्द सूची का उपयोग करता है। सूचकांक बनाने से पहले आपको इन्हें ध्यान में रखना चाहिए।

+0

धन्यवाद। हमारे पास पहले से ही एक पूर्ण पाठ अनुक्रमणिका है, लेकिन इसे चलाने या क्वेरी करने में अभी भी 5-10 सेकंड या अधिक समय लगता है। – Louisa

+0

@Louisa क्या आप फुलटेक्स्ट इंडेक्स का उपयोग करने के बजाय LIKE के बजाय MATCH का उपयोग करते हैं? –

+0

अच्छी टिप, लेकिन मैच कई पंक्तियों पर वापस आती है जब मैं चयन करता हूं * उत्पादों से जहां (NAME + शब्द) ('शब्द 1 + शब्द 2 + शब्द 3' ') - मुझे सभी 3 शब्दों के साथ परिणाम मिलते हैं, लेकिन परिणाम केवल 1 के साथ नाम में शब्दों के -2। – Louisa

संबंधित मुद्दे