אינדקסים מלאים של MySQL ו- MySQL אינדקסים

Image representing MySQL as depicted in CrunchBase

לפני זמן מה כתבתי עליו חיפוש טקסט מלא ב- MySQL 🙂 היום הייתה לי חוויה מאוד מעניינת עם בקשה אחת. באופן כללי, השאילתה מחפשת תוצאות שחסרות מטבלה אחרת. בחירה בסיסית אחת וסאב משנה בחר בחלק היכן של השאילתה. באופן כללי, השלד הוא

SELECT DISTINCT (
`field`
)
FROM `table1`
WHERE `someID` =44
AND `firsTextField` NOT
IN (

SELECT DISTINCT (
`secondTextField`
)
FROM `table2`
WHERE `otherID` =44
)

בעיקרון שאילתה פשוטה. כתבתי את זה בשביל 30 שניות אני מפעיל אותו והמכונה מתעלפת. אחרי המתנה ארוכה וסבלנית מצידי או ליתר דיוק ~ 43 שניות . אני ירקתי את התוצאה חחח . בית משוגעים פף. אני נכנס למכונה וצופה במעבד בדרך כלל נטען כמעט במצב סרק. הלם ואימה. אני מריץ את השאילתה שוב באותה התוצאה. לעזאזל WTF. אני רץ להסביר את השאילתה והכל מאיר – השדה השני secondTextField הוא בלבד חיפוש טקסט מלא ללא מדד, ושם הפלטה צנועה של בערך 35K קווים. למי לקרוא – חיפוש טקסט מלא אינו אינדקס. הבעיה ברורה במהירות

ALTER TABLE `links` ADD INDEX ( `linkUrlID` ) 

והדברים נפלו על מקומם שאילתה שאילתא 0.0005 שניות 😀

היזהר כיצד להניח מהם את האינדקסים, מהירות השאילתה תלויה בך בשולי.

p.s באופן כללי, אני אשם במצב הנ"ל לא רק מכיוון שהוא חסר אינדקס אלא מכיוון שהוא לא משתמש בשיטת חיפוש הטקסט המלא 😀

משופרת על ידי זמנטה

Leave a Reply

Your email address will not be published. Required fields are marked *

Anti SPAM *