View Full Version : کمک در ایجاد بهترین کئوری در دیتابیس
puriya-aghaei
دوشنبه 25 خرداد 1394, 02:33 صبح
سلام دوستان من یه بانک دارم 47 ملیون شماره بر اساس کد پستی داخلشه حالا میخوام کاربر بتونه مثلا 3 شماره اول که زد سیستم بین این 47 ملیون بره بگرده اونهایی که با مثلا پیش شماره 715 شروع شدند رو بشماره
کئوری که من استفاده میکنم این هست
select count(*) from `tblpostal` where LEFT(postal, $Code)= '".$Postall."
$code تعداد شماره ها یعنی مثلا 917 که میزنه این میشه 3 یعنی 3 عدد اول
$Postall کدپستی هست که کاربر وارد کرده مثلا 917
این دستور درست اجرا میشه ولی حدود 10 ثانیه یا بیشتر طول میشکه دوستان کسی راه حل بهتری سراغ نداره
ین $code داینامیک هست یعنی کد پستی که کاربر وارد کرده رو میشمرم و میزارم داخلش
به اینصورت هم مینویسم بازم خروجی در زمان مناسب نشون نمیده
SELECT COUNT(*) FROM `".$table."` WHERE substring(postal,1, $code)=$where_value
nazanin_asadi_1
دوشنبه 25 خرداد 1394, 09:52 صبح
اینو تست کنید
SELECT
count(*)
FROM
`tblpostal`
WHERE
postal LIKE "'.$Postall.'%"
برای ستون postal یه ایندکس بزار
سرعتت 10 برابر بیشتر میاد پایین
pyramid_ali
دوشنبه 25 خرداد 1394, 10:55 صبح
البته من یه چیز بگم که LIKE از ایندکس استفاده نمی کنه! به خاطر همین یه دستور کند واسه سرچ حساب میشه!
می تونی روی ستونت یک FULL TEXT INDEX بزنی و بعدش از MATCH AGAINST استفاده کنی! البته بگم که شاید در حالت کلی LIKE سریع تر باشه ولی وقتی ایندکس کنی MATCH AGAINST سریعتره!
puriya-aghaei
دوشنبه 25 خرداد 1394, 18:59 عصر
از دستور like نمیتونم استفاده کنم چون کد پستی ها 10 رقمی هستند و من به تعداد ورودی باید فیلتر کنم
یعنی اگه زد 715 باید سه رقم اول 47 ملیون رکورد رو چکم کنم حالا اگه زد 7158 باید 4 رقم چک کنم اگه هم شد 10 همه 10 رقم رو
pyramid_ali
دوشنبه 25 خرداد 1394, 22:22 عصر
منظورتو نفهمیدم! خوب 715% سه رقم اول رو چک میکنه! و 7158% هم چهار رقم اول رو دیگه! مشکل چیه؟
nazanin_asadi_1
سه شنبه 26 خرداد 1394, 09:39 صبح
دوست عزیز عملکر % رو برای زمانی استفاده میکنیم که نمی دونیم بقیه متن چی هستش
سه تا مثال میزنم
1- شماره های آخر کد پستی رو می دونیم ولی از عددهای اولش هیچی نمی دونیم پس میزنیم همه اون شماره هایی رو نشونمون بده که شماره های آخرش اونایی که ما وارد میکنیم باشه
SELECT * from table1 WHERE field1 LIKE "%123"
این کد میاد همه کدپستی هایی که آخرش 123 هست رو بهمون بر میگردونه عملکر % میگه که اعداد قبلی هر چی بود بیاره
8614841123
5641616123
5416651123
2- شماره های اول رو میدونیم
SELECT * from table1 WHERE field1 LIKE "123%"
این کد هم میاد همه شماره هایی که اعداد اولش 123 هست رو لیست میکنه عملکر % میگه که اعداد بعدی هر چی بود مهم نیست
123489618
123496481
123458978
3- هر کجای شماره 123 بود رو بیاره
SELECT * from table1 WHERE field1 LIKE "%123%"
اینم توی شماره ها هر کجای عدد 123 بود اونها رو میاره و به اول و آخر و وسط جمله توجه نمیکنه هر کجا 123 بود اونها رو میاره
مثلا
5496123841
1234845493
4584515123
امیدوارم که مثلاها قابل فهم بوده باشه واست :چشمک::چشمک::چشمک:
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.