<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-827173343570561485</id><updated>2012-02-16T18:45:13.688-08:00</updated><category term='оптимизация запросов'/><title type='text'>vbulletin accelerated</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://acc-vbulletin.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/827173343570561485/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://acc-vbulletin.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>мастер</name><uri>http://www.blogger.com/profile/10079994770366395188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-827173343570561485.post-2655555315013388278</id><published>2010-05-02T14:24:00.000-07:00</published><updated>2010-05-02T14:41:04.729-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='оптимизация запросов'/><title type='text'>mysql-slow-queries-username-and-post</title><content type='html'>&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;span style="color:blue;"&gt;Занимаясь настройкой и оптимизацией MySQL сервера, я как-то включил лог медленных запросов. Через несколько часов я обнаружил в логе следующий запрос.&lt;br /&gt;SELECT&lt;/span&gt; &lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;postid&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;pagetext&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#ff0080;"&gt;&lt;b&gt;Ifnull&lt;/b&gt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;user&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;username&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt; &lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;username&lt;/span&gt;&lt;span style="color:maroon;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;AS&lt;/span&gt; &lt;span style="color:maroon;"&gt;username&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:maroon;"&gt;dateline&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;FROM&lt;/span&gt;   &lt;span style="color:maroon;"&gt;post&lt;/span&gt; &lt;span style="color:blue;"&gt;AS&lt;/span&gt; &lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;LEFT&lt;/span&gt; &lt;span style="color:blue;"&gt;JOIN&lt;/span&gt; user &lt;span style="color:blue;"&gt;AS&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;user&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;         &lt;span style="color:blue;"&gt;ON&lt;/span&gt; &lt;span style="color:maroon;"&gt;(&lt;/span&gt; &lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;user&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;userid&lt;/span&gt; &lt;span style="color:silver;"&gt;=&lt;/span&gt; &lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;userid&lt;/span&gt; &lt;span style="color:maroon;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;WHERE&lt;/span&gt;  &lt;span style="color:maroon;"&gt;threadid&lt;/span&gt; &lt;span style="color:silver;"&gt;=&lt;/span&gt; &lt;span style="color:black;"&gt;12511&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;AND&lt;/span&gt; &lt;span style="color:maroon;"&gt;visible&lt;/span&gt; &lt;span style="color:silver;"&gt;=&lt;/span&gt; &lt;span style="color:black;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;ORDER&lt;/span&gt;  &lt;span style="color:blue;"&gt;BY&lt;/span&gt; &lt;span style="color:maroon;"&gt;dateline&lt;/span&gt; &lt;span style="color:blue;"&gt;ASC&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;LIMIT&lt;/span&gt;  &lt;span style="color:black;"&gt;3750&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt; &lt;span style="color:black;"&gt;250&lt;/span&gt;&lt;span style="color:silver;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Судя по логу, этот запрос выполнялся более 8 секунд&lt;br /&gt;# Query_time: 8.245419  Lock_time: 0.000153 Rows_sent: 250  Rows_examined: 20688&lt;br /&gt;&lt;br /&gt;Прогон того же запроса на машине разработчика (без живой нагрузки) дал время выполнения 0.072 секунды.&lt;br /&gt;mysql&gt; SELECT COUNT(*) FROM post;&lt;br /&gt;+----------+&lt;br /&gt;| COUNT(*) |&lt;br /&gt;+----------+&lt;br /&gt;|   475225 |&lt;br /&gt;+----------+&lt;br /&gt;Судя по тому, что выборка затронула &lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;20688 строк данных, делаю вывод, что операцией LEFT JOIN была выполнена склейка всех записей таблицы &lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;span style="color:maroon;"&gt;post с записями таблицы &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;user, после чего было выполнено отсечение &lt;/span&gt;250 строк.&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Вглядевшись в запрос повнимательнее, я  решил, что рациональнее сначала выбрать нужные 250 строк, и только потом производить склейку.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Хочу заметить, что операция склейки &lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;LEFT JOIN не изменяет количество выбранных из таблицы &lt;/span&gt;&lt;span style="font-family:Courier  New;font-size:85%;"&gt;&lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt; записей&lt;/span&gt;, так как поле &lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;span style="color:maroon;"&gt;userid &lt;/span&gt;&lt;/span&gt;таблицы &lt;span style="font-family:Courier  New;font-size:85%;"&gt;user&lt;/span&gt; является первичным ключом и поэтому уникально.&lt;br /&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;Итак, оптимизированный запрос будет выглядеть так:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;span style="color:blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;postid&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;pagetext&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#ff0080;"&gt;&lt;b&gt;Ifnull&lt;/b&gt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;USER&lt;/span&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;username&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt; &lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;username&lt;/span&gt;&lt;span style="color:maroon;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;AS&lt;/span&gt; &lt;span style="color:maroon;"&gt;username&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:maroon;"&gt;dateline&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;FROM&lt;/span&gt;   &lt;span style="color:maroon;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color:maroon;"&gt;postid&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:maroon;"&gt;pagetext&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:maroon;"&gt;username&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:maroon;"&gt;dateline&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:maroon;"&gt;userid&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:blue;"&gt;FROM&lt;/span&gt;   &lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:blue;"&gt;WHERE&lt;/span&gt;  &lt;span style="color:maroon;"&gt;threadid&lt;/span&gt; &lt;span style="color:silver;"&gt;=&lt;/span&gt; &lt;span style="color:black;"&gt;12511&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:blue;"&gt;AND&lt;/span&gt; &lt;span style="color:maroon;"&gt;visible&lt;/span&gt; &lt;span style="color:silver;"&gt;=&lt;/span&gt; &lt;span style="color:black;"&gt;1&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:blue;"&gt;ORDER&lt;/span&gt;  &lt;span style="color:blue;"&gt;BY&lt;/span&gt; &lt;span style="color:maroon;"&gt;dateline&lt;/span&gt; &lt;span style="color:blue;"&gt;ASC&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:blue;"&gt;LIMIT&lt;/span&gt;  &lt;span style="color:black;"&gt;3750&lt;/span&gt;&lt;span style="color:silver;"&gt;,&lt;/span&gt; &lt;span style="color:black;"&gt;250&lt;/span&gt;&lt;span style="color:maroon;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;AS&lt;/span&gt; &lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:blue;"&gt;LEFT&lt;/span&gt; &lt;span style="color:blue;"&gt;JOIN&lt;/span&gt; &lt;span style="color:blue;"&gt;USER&lt;/span&gt; &lt;span style="color:blue;"&gt;AS&lt;/span&gt; &lt;span style="color:blue;"&gt;USER&lt;/span&gt;&lt;br /&gt;         &lt;span style="color:blue;"&gt;ON&lt;/span&gt; &lt;span style="color:maroon;"&gt;(&lt;/span&gt; &lt;span style="color:blue;"&gt;USER&lt;/span&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;userid&lt;/span&gt; &lt;span style="color:silver;"&gt;=&lt;/span&gt; &lt;span style="color:maroon;"&gt;post&lt;/span&gt;&lt;span style="color:silver;"&gt;.&lt;/span&gt;&lt;span style="color:maroon;"&gt;userid&lt;/span&gt; &lt;span style="color:maroon;"&gt;)&lt;/span&gt;&lt;span style="color:silver;"&gt;;&lt;/span&gt;&lt;br /&gt;Время выполнения запроса на тестовой машине - 0.008 сек.&lt;br /&gt;Экономия - в 9 раз.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/827173343570561485-2655555315013388278?l=acc-vbulletin.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://acc-vbulletin.blogspot.com/feeds/2655555315013388278/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://acc-vbulletin.blogspot.com/2010/05/mysql-slow-queries-username-and-post.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/827173343570561485/posts/default/2655555315013388278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/827173343570561485/posts/default/2655555315013388278'/><link rel='alternate' type='text/html' href='http://acc-vbulletin.blogspot.com/2010/05/mysql-slow-queries-username-and-post.html' title='mysql-slow-queries-username-and-post'/><author><name>мастер</name><uri>http://www.blogger.com/profile/10079994770366395188</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
