PDA

View Full Version : سرعت پایین در گرفتن کوئری با رکوردهای بالا



morteza_naderloo
شنبه 14 شهریور 1394, 13:15 عصر
با سلام
یک جدول دارم 45000 تا رکورد داره
مشکلی که دارم اینه که وقتی میخوام جستجو توی این جدول انجام بده خیلی زمان میگیر زمان متوسط بین 11 تا 23 ثانیه زمان میگیره

آیا راهی هست که بشه این زمان رو کم کرد ؟ ( با تغییر در کوئری یا mysql یا php)

این کوئری بنده است


SELECT id,before_topic,topic,summary FROM news WHERE status=1 && (topic LIKE %$this%' || summary LIKE '%$this%') OREDR BY publish_date DESC LIMIT 0,18


مشخصات سرورم


Processor Name
Intel(R) Core(TM) i7 CPU 930 @ 2.80GHz


Vendor ID
GenuineIntel


Processor Speed (MHz)
2801.000



رم 24 گیگ

ساختار جدول


CREATE TABLE IF NOT EXISTS `news_content` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`language` int(11) NOT NULL,
`position_in_first_page` int(2) NOT NULL,
`position_in_first_page_number` int(11) NOT NULL,
`topic_color` int(2) NOT NULL,
`before_topic` varchar(300) COLLATE utf8_persian_ci NOT NULL,
`topic` varchar(300) COLLATE utf8_persian_ci NOT NULL,
`summary` varchar(1000) COLLATE utf8_persian_ci NOT NULL,
`content` longtext COLLATE utf8_persian_ci NOT NULL,
`publisher` int(3) NOT NULL,
`editor` int(3) NOT NULL,
`publish_date` int(11) NOT NULL,
`edit_date` int(11) NOT NULL,
`tags` text COLLATE utf8_persian_ci NOT NULL,
`source_name` varchar(200) COLLATE utf8_persian_ci NOT NULL,
`source_url` varchar(600) COLLATE utf8_persian_ci NOT NULL,
`rating_positive` int(11) NOT NULL,
`rating_negative` int(11) NOT NULL,
`tariff` int(11) NOT NULL,
`visit` int(11) NOT NULL,
`status` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci AUTO_INCREMENT=45300;




این تاپیک ها را هم بررسی کردم اما نتیجه ای نداشت

http://barnamenevis.org/showthread.php?87165-%DB%8C%DA%A9-%DA%A9%D9%88%D8%A6%D8%B1%DB%8C-%D9%88-%DB%8C%DA%A9-%D8%AC%D8%AF%D9%88%D9%84-%D9%88-Master-Details&highlight=%DA%A9%D9%88%D8%A6%D8%B1%DB%8C+%D8%A8%D8 %A7+%D8%AA%D8%B9%D8%AF%D8%A7+%D8%A8%D8%A7%D9%84%D8 %A7

http://barnamenevis.org/showthread.php?473211-%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%B3%DB%8C%D8%B3%D8%AA%D9%85-%D9%87%D8%A7%DB%8C-%D9%BE%D8%B1%D8%AA%D8%B1%D8%AF%D8%AF-%D8%A8%D8%A7-%D8%AA%D8%B1%D8%A7%D9%81%DB%8C%DA%A9-%D8%A8%D8%B3%DB%8C%D8%A7%D8%B1-%D8%A8%D8%A7%D9%84%D8%A7-%D8%A8%D8%A7-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF%D9%87%D8%A7%DB%8C-%D8%A8%D8%B3%DB%8C%D8%A7%D8%B1-%D8%B2%DB%8C%D8%A7%D8%AF&highlight=%DA%A9%D9%88%D8%A6%D8%B1%DB%8C+%D8%A8%D8 %A7+%D8%AA%D8%B9%D8%AF%D8%A7+%D8%A8%D8%A7%D9%84%D8 %A7


http://barnamenevis.org/showthread.php?304545-%DA%A9%D8%B3%DB%8C-%D8%AA%D8%A7-%D8%AD%D8%A7%D9%84%D8%A7-%D8%B2%D9%85%D8%A7%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%DB%8C%D9%87-%DA%A9%D9%88%D8%A6%D8%B1%DB%8C-%D8%B1%D9%88%DB%8C-%D8%AC%D8%AF%D9%88%D9%84%DB%8C-%DA%A9%D9%87-%D8%A8%D8%A7%D9%84%D8%A7%DB%8C-1-%D9%85%DB%8C%D9%84%DB%8C%D9%88%D9%86-%D8%B1%D8%AF%DB%8C%D9%81-%D8%AF%D8%A7%D8%B4%D8%AA%D9%87-%D8%A8%D8%A7%D8%B4%D9%87-%D8%B1%D9%88-%D8%AA%D8%B3%D8%AA-%DA%A9%D8%B1%D8%AF%D9%87%D8%9F&highlight=%DA%A9%D9%88%D8%A6%D8%B1%DB%8C+%D8%A8%D8 %A7+%D8%AA%D8%B9%D8%AF%D8%A7+%D8%A8%D8%A7%D9%84%D8 %A7

djtrex
شنبه 14 شهریور 1394, 14:12 عصر
میتونید از ایندکس FULLTEXT استفاده کنید (اگه جدول های شما از نوع InnoDB هست از mysql 5.6 به بعد ساپورت میشه قبل از اون فقط MyISAM)


مقایسه پرفرمنس:
http://makandracards.com/makandra/12813-performance-analysis-of-mysql-s-fulltext-indexes-and-like-queries-for-full-text-search

مستندات mysql:
https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html
http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html

آموزش نحوه استفاده:
http://www.mysqltutorial.org/activating-full-text-searching.aspx
http://www.hackingwithphp.com/9/3/18/advanced-text-searching-using-full-text-indexes
https://blog.marceloaltmann.com/en-using-the-mysql-fulltext-index-search-pt-utilizando-mysql-fulltext/

Mohammadsgh
یک شنبه 15 شهریور 1394, 02:57 صبح
like باعث کندی query میشه.چون همه نتایج رو یک بار تو حافظه mysql ذخیره میشه و سپس جستجو میشه.
اگر جدولتون foriegn key (کلید بیرونی)نداره.نوع جدول رو myisam کنید و برای جستجوتون از fulltext استفاده کنید

morteza_naderloo
یک شنبه 15 شهریور 1394, 13:47 عصر
با سلام
ممنون از راهماییتون
موتور جدول myisam هست و از نوع long text
fulltext یعنی چی ؟!

Mohammadsgh
یک شنبه 15 شهریور 1394, 19:00 عصر
نوع جستجوتون هست

engmmrj
یک شنبه 15 شهریور 1394, 21:50 عصر
من چند راه حل به ذهنم میرسه
۱ - index گذاری کنید
۲- از store procedure استفاده کنید
۳- سرورتون را ارتقاع بدید (برای mysql چهار منبع cpu , ram , hard , network حائزه اهمییت است که درمورد آنها دقت کنید)
۴- سعی کنید پارارمتر های ثابت به query تون اضافه کنید تا تعداد رکورد های آن کم شود.
و در آخر هم چک کن ببین cache mysql روشن هست یا نه


یک راه دیگه هم هست ! کلا سرچ خودتون را بیخیال بشین و از سرچ گوگل استفاده کنین ُ یک ربات بنویسید که هر موقع سرچ شد مثلا بره ۲۰ لینک اول گوگل رو براتون بیاره.