مشکل در سرعت سرچ mysql

aminbrlee

Member
با سلام خدمت همه دوستان
من یه مشکلی دارم تو سیت که به صورت مفصل توضیح میدم امیدوارم که مثل همیشه مارو از راهنماییاتون بهرمند کنید.
من یه سایت دارم که دارای یک دیتا بیس هست و این دیتا بیس یه جدول داره و این جدول چند تا ستون
ستون اول من number هست و شامل یک سری عدد هست که یکی یکی اضافه میشه
تعداد سطر ها تقریبا 160 هزار تا میشه هر وقت من میام و یه سرچ انجام میدم بر اساس number
با مثلا تیکه کد زیر
PHP:
	result = mysql_query("select * from $Table_name where number=100")//darkhaste ma
سریع به من نتایج رو نمایش میده ولی وقتی بجای سرچ از ستون اول میام از بقیه ستون ها سرچ می کنم و بجای مساوی از دستور like خیلی طول میکشه که نتیجه ر به من نمایش بده
به گفته دیگه همین سایت مجید انلاین وقتی ما میایم بین این همه صفحه یه سرچ انجام میدیم سریع به ما نتیجه رو میده لازم به ذکر است که من سرور اختصاصی و با کیفیت دارم . من در پایان کد php همیشه این کد رو استفاده میکنم و میدونم که رم رو از دستور کنونی خالی می کنم

PHP:
     mysql_free_result();
     mysql_close();
اطفا راهنمایی بفرمایید
 

aminsm

New Member
با سلام،
به احتمال زیاد برای ستونهای دیگرتون از ایندکس گذاری استفاده نکرده‌اید.
 

aminbrlee

Member
نه دوست عزیز ببینید من یه جدول دارم که دارای 3 تا ستون هست باری مثال اینو ببینید
number key1 key2
حال number از 1 شروع شده و در هر وارد کردن یک سطر یکی اضافه میشه
وقتی جستجو بر اساس number انجام میدم سیع به جواب میرسه مثلا بهش میگم اونجایی از جدول که number اون 10 هست key 1 چنده و اون سریع به من میگه ولی وقتی بهش میگم اونجایی که key 1 شبیه فلان کلمه هست رو به من نمیده در اصل من از number به عنوان ایندکس برای 2 ستون دیگه استقفاده کردم آیا این روش من اشتباهه آیا روش دیگه وجود داره واسه تعریف سطر های زیاد لطفا کامل راهنمایی کنین
با تشکر
 

Masoud1365

مدیر انجمن
توی بخش تاپیک های مهم نحوه صحیح سرچ کردن رو مطالعه بفرمائید !
 

aminbrlee

Member
دوست عزیز سلام
من 6 ساله حدودا تو این انجمن عضو هستم و کاملا بهش واردم می دونم اول باید سرچ کنم ولی من ول سرچ کردم و لی به نتیجه نرسیدم.
من پست خودم رو دوباره مینویسم شما هم لطفا اگه صفحه ای هست که میتونه به من کمک کنه رو لینک کنید با تشکر
.................
نه دوست عزیز ببینید من یه جدول دارم که دارای 3 تا ستون هست باری مثال اینو ببینید
number key1 key2
حال number از 1 شروع شده و در هر وارد کردن یک سطر یکی اضافه میشه
وقتی جستجو بر اساس number انجام میدم سیع به جواب میرسه مثلا بهش میگم اونجایی از جدول که number اون 10 هست key 1 چنده و اون سریع به من میگه ولی وقتی بهش میگم اونجایی که key 1 شبیه فلان کلمه هست رو به من نمیده در اصل من از number به عنوان ایندکس برای 2 ستون دیگه استقفاده کردم آیا این روش من اشتباهه آیا روش دیگه وجود داره واسه تعریف سطر های زیاد لطفا کامل راهنمایی کنین
با تشکر
.................
 

aminsm

New Member
وقتی بهش میگم اونجایی که key 1 شبیه فلان کلمه هست رو به من نمیده در اصل من از number به عنوان ایندکس برای 2 ستون دیگه استقفاده کردم...

شما برای ستون Number ایندکس گذاری کردین ولی برای خود ستون key1 از ایندکس گذاری استفاده نکردین، به احتمال زیاد مشکلتون همینه.
 

aminbrlee

Member
سلام
آقا ظاهرا کسی جواب نداره-من سئوالمو احتمالا خوب نپرسیدم-آقا اصلا فرض کنید یه جدول داریم که 2 ستون داره به اسم c1 , c2
c1 شامل عنوان صفحه و c2 متن کلی هست حالا من میخوام کلمه "دانلود " رو تو این جدول جستجو کنم چی کار کنم که سریع سرچ بشه.یه چیزی مثل سرچی که تو همین انجمن انجام میشه .در ضمن به فرض شما بگید برای ستون ها ایندکس گذاری کنید لطفا توضیح بدین منظورتون چیه.لطفا کمک کنید ضروریه
باتشکر
 

ziXet

مدیر انجمن PHP/MYSQL
سلام
آقا ظاهرا کسی جواب نداره-من سئوالمو احتمالا خوب نپرسیدم-آقا اصلا فرض کنید یه جدول داریم که 2 ستون داره به اسم c1 , c2
c1 شامل عنوان صفحه و c2 متن کلی هست حالا من میخوام کلمه "دانلود " رو تو این جدول جستجو کنم چی کار کنم که سریع سرچ بشه.یه چیزی مثل سرچی که تو همین انجمن انجام میشه .در ضمن به فرض شما بگید برای ستون ها ایندکس گذاری کنید لطفا توضیح بدین منظورتون چیه.لطفا کمک کنید ضروریه
باتشکر
سلام

دستور LIKE معمولا کمی کندتر هست اما همانطور که دسوتان گفتن اگه شما از ایندکس گذاری استفاده کنید سرعت سرچ خیلی بهبود پیدا میکنه.
برای ایندکس گذاری هم اگه از phpmyadmin استفاده میکنی برو به table structure و قسما پایین سمت چپ یک جدول داره به نام indexes
اونجا روی Go کلیک کن تا به یه صفحه دیگه بری. تو صفحه جدید ایندکس رو فیلد مورد نظر رو انخاب کن و save رو برن
اگه جدول بزرگ باشه یکمی طول میکشه تا ایندکس کنه بعد دوباره کوئری رو ران کن ببین نتیجه چی میشه

موفق باشید
 

aminbrlee

Member
با تشکر از شما یه سئوال دیگه آیا راهی هست که در همون ابتدا هنگام ساختن جدول با دستورات php ایندکس گذاری رو فعال کرد و سئوال دیگه اینکه آیا پس از اینکه من ایندکس گذاریو فعال کردم در سطر های بعدی که بعدا اضافه میشه ایندکس گذاری اعمال میشه
ممنون
 

aminbrlee

Member
سلام
من اینکارو کردم و ایندکس گذاری رو انجام دادم و تایپ اونو btree قرار دادم ولی الان اصلا هیچ نتیجه ای رو نشون نمیده نوع خود این ستون تکست بوده.آیا الان که ایندکس گذاری کردم کوءری من از شکل زیر تغییر میکنه
PHP:
$result = mysql_query("select * from Table_name where keyname like '%matn%' order by keyname");

این همه دستوریه که من ازش استفاده میکنم لطفا اگه مشکلی داره بگید لازیم به ذکر که من قبل از این دستور ارتباطم رو با دیتابیس برقرار میکنم

PHP:
$result = mysql_query("select * from Table_name where keyname like '%matn%' order by keyname");
while ($i = mysql_fetch_object($result))
{ 
echo '*****<br>'.$i->number.'<br>';
echo $i->keyname.'<br>';
}
 
آخرین ویرایش:

aminbrlee

Member
سلام من مشکل رو پیدا کردم ولی دلیلشو نمی دونم مشکل اینه که وقتی % در انتهای متن سرچ شده قرار می گیره هیچ مشکلی پیش نمی یاد ولی وقتی ابتداش باشه یه کم طول میکشه و بعدش صفحه ارور میده مثل صفحه ای که وجود نداره لطفا کمک کنید
این کد جواب میده
PHP:
$result = mysql_query("select * from Table_name where keyname like 'matn%' order by keyname");
این کد جواب نمیده
PHP:
$result = mysql_query("select * from Table_name where keyname like '%matn' order by keyname");
 

جدیدترین ارسال ها

بالا