PDA

View Full Version : Mysql Question



the Dead
جمعه 10 شهریور 1385, 18:52 عصر
CREATE TABLE IF NOT EXISTS cms_articles (
article_id int(11) NOT NULL auto_increment,
author_id int(11) NOT NULL default '0',
is_published tinyint(1) NOT NULL default '0',
date_submitted datetime NOT NULL default '0000-00-00 00:00:00',
date_published datetime NOT NULL default '0000-00-00 00:00:00',
title varchar(255) NOT NULL default '',
body mediumtext NOT NULL,
PRIMARY KEY (article_id),
KEY IdxArticle (author_id,date_submitted),
FULLTEXT KEY IdxText (title,body)
) TYPE = MyISAM; این سه خط اخر چه کار میکنن ?
myisam چیه ?

Ernesto
جمعه 10 شهریور 1385, 23:28 عصر
2 تا خط اول وضعیت Index رو مشخص می کنن ,
اولی می گه که روی author_id,date_submitted یه INDEX ساخته بشه , این کار باعث می کنه هنگام استفاده از WHERE خیلی سریعتر و بهتر نتایج ساخته بشن .
دومی می گه که یه INDEX به صورت FULL TEXT روی title,body ساخته بشه , با این کار می تونین از مزیای جستجو به روش Full Text استفاده کنین .

خط آخر هم نوع Engine مربوط به Table رو مشخص می کنه , که معمولا MyIsam هست یا InnoDB که هر کدوم مزایا و معایب خودشون رو دارن .

tabib_m
شنبه 11 شهریور 1385, 01:07 صبح
مزیای جستجو به روش Full Text
ببخشید ، میشه در این مورد توضیح بدید؟
جستجو به روش Full Text یعنی چی؟

oxygenws
شنبه 11 شهریور 1385, 08:03 صبح
1- تیتر مناسب انتخاب کنید.
2- برادر "طبیب"، سوالت رو تو یک تاپیک مجزا بپرس.
3- به احترام ارنستو تاپیک قفل نمی شه.
4- در صورت مشاهده پاسخ به طبیب (مخدوش شدن بیش از حد تاپیک) تاپیک حذف خواهد شد!!

the Dead
شنبه 11 شهریور 1385, 10:30 صبح
2 تا خط اول وضعیت Index رو مشخص می کنن ,
اولی می گه که روی author_id,date_submitted یه INDEX ساخته بشه , این کار باعث می کنه هنگام استفاده از WHERE خیلی سریعتر و بهتر نتایج ساخته بشن .
دومی می گه که یه INDEX به صورت FULL TEXT روی title,body ساخته بشه , با این کار می تونین از مزیای جستجو به روش Full Text استفاده کنین .

خط آخر هم نوع Engine مربوط به Table رو مشخص می کنه , که معمولا MyIsam هست یا InnoDB که هر کدوم مزایا و معایب خودشون رو دارن . با عرض معضرت من همواسم نبود کجا سوال رو مطرح کردم لطفاً اگه کسی میتونه انتقال بده بخش MYSQL
بابا چه force major توضیح دادی
چرا این دو تا فیلد رو حالا از بین اون همه فیلد انتخاب کرده و چجوری باعث سریع تر شدن where میشه
مزایای fulltext چیه لطفاً با مثال بگو
لطفاً در مورد خط اخر هم یه توضیحی بده - مزایای هر engine ؛
من یک مشکل دارم که اگه خط اخر نوع engine رو نزارم mysql خطا میده علت چیه
یعنی TYPE = MyISAM رو ننویسم

:تشویق:مرسی

Ernesto
شنبه 11 شهریور 1385, 13:31 عصر
با عرض معضرت من همواسم نبود کجا سوال رو مطرح کردم لطفاً اگه کسی میتونه انتقال بده بخش MYSQL
بابا چه force major توضیح دادی
چرا این دو تا فیلد رو حالا از بین اون همه فیلد انتخاب کرده و چجوری باعث سریع تر شدن where میشه
مزایای fulltext چیه لطفاً با مثال بگو
لطفاً در مورد خط اخر هم یه توضیحی بده - مزایای هر engine ؛
من یک مشکل دارم که اگه خط اخر نوع engine رو نزارم mysql خطا میده علت چیه
یعنی TYPE = MyISAM رو ننویسم

:تشویق:مرسی

//

علت انتخاب اون دو تا فیلد برای اینه که در کوئری هنگام استفاده از WHERE از همون دو تا فیلد استفاده می شه . مثل این :




SELECT * FROM `cms_articles` WHERE author_id='$value_1' AND date_submitted='$value_2'



در حالت کلی وقتی این کوئری اجرا می شه MySql اصلا نمی دونه که WHERE رو کجا می تونه پیدا کنه یا اصلا همچین چیزی وجود داره یا نه , پس شروع می کنه داخل تمام رکورد های شما می گرده تا مقدار منطبق رو پیدا کنه , طرز کار INDEX دقیقا مثل فهرست اول یه کتاب هست , اگه شما یه کتاب مهندسی بدون فهرست داشته باشید برای پیدا کردن یه مطلب باید کل صفحه ها رو ورق بزنید ولی وقتی فهرست داره فقط با نگاه کردن به اون صفحه مربوط به اون مطلب رو خیلی سریع و راحت پیدا می کنین . INDEX دقیقا کار اون فهرست رو برای رکورد های شما انجام می ده .
/
FULLTEXT یکی از مزایای MyIsam هست , نسبت به جستجوی معمولی (LIKE) امکانات خیلی بیشتری در اختیارتون می ذاره , از جمله اینکه نتایج رو بر حسب میزان "ارتباط" دسته بندی می کنه , کلمه های رایج رو از کوئری جدا می کنه مثل "the" (اگر دقت کرده باشید در جستجو در گوگل هم گروهی از کلمه های رایج جستجو نمی شن ) , کلمه های زیر 4 کارکتر (مطمئن نیستم در تعدادش ) رو جز کوئری قرار نمی ده , و چند تای دیگه هست , جستجو به معنای "واقعی" رو براتون انجام می ده .
/
MyIsam سریعترِ (برای همین Engine پیش فرض هست ), پشتیبانی از FULLTEXT , قابلیت Repair داره , InnoDB یکی از بهترین مزیاش اینه که موقع استفاده از UPDATE کل Table رو Lock نمی کنه , برای همین برای جاهایی که بیشتر "نوشتن" وجود داره تا "خوندن" بهتره . جزئیات بیشتر داخل عکس هست :


http://i5.tinypic.com/27ymxs0.gif




خطایی هم که می ده برای اینه که شما برای Engine مقدار "پیشفرض" رو تعیین نکردین . بیشتر از MyIsam استفاده می شه , یادم نیست دقیقا از کجا می شه این مقدار رو تعیین کرد .

موفق باشید .

hamed_m
شنبه 11 شهریور 1385, 15:23 عصر
اگر phpmyadmin استفاده میکنید در بخش operations میتونید نوع دیتا بیس رو تغییر بدید یا:


ALTER TABLE `mytable` ENGINE =MYISAM

the Dead
شنبه 11 شهریور 1385, 22:15 عصر
ببخشید یه سری سوال دیگه برام به وجود امد اون اسمی که جلوی FULLTEXT KEY گذاشتیم --> idxtext به چه کاری میاد

سوال دیگه اینکه شما گفتین FULLTEXT یه چیزی شبیه LIKE هست خوب از LIKE در QUERY استفاده میشه از FULLTEXT چجوری باید استفاده کرد و چرا TITLE,BODY رو جزوه FULLTEXT انتخاب کرده .


یه جا خوندم که KEY با PRIMERY KEY فرقی نداره ولی در عمل وقتی میخواستم در PRIMERY KEY داده تکراری بریزم DUPLICATE ERROR ولی در فیلدی که KEY هست فقط با یک Warning رو به رو میشدم و QUERY انجام میشد
Query OK, 1 row affected, 2 warnings (0.03 sec)

مرسی

oxygenws
یک شنبه 12 شهریور 1385, 07:58 صبح
برادر ارنستو، ممنون میشم بگید که این تصویر رو از کجا آوردید؟؟ جالب بود :)

Ernesto
یک شنبه 12 شهریور 1385, 08:19 صبح
تصویر مربوط به یکی از مقالات سایت Mysql در مورد همین Engine ها هست , برای راحتی کار اون قسمت اش رو جدا کردم و اینجا قرار دادم . :
http://dev.mysql.com/tech-resources/articles/storage-engine/part_3.html


بقیه قسمت هاش هم اینجاست :
http://dev.mysql.com/tech-resources/articles/storage-engine/part_1.html
http://dev.mysql.com/tech-resources/articles/storage-engine/part_2.html

خوندنش خالی از لطف نیست , البته اگه موجب سردرگمی بیشتر نشه .

///

idxtext اسمی هست که برای اون INDEX استفاده می شه .

ببخشید الان باید برم ولی جواب همه سوال هات رو با یکم جستجو بدست می آری .