<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Корчагин Станислав &#187; Добавить метку</title>
	<atom:link href="http://korchasa.ru/index.php/tag/%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%b8%d1%82%d1%8c-%d0%bc%d0%b5%d1%82%d0%ba%d1%83/feed/" rel="self" type="application/rss+xml" />
	<link>http://korchasa.ru</link>
	<description>Разработка, тестирование, запуск</description>
	<lastBuildDate>Mon, 24 May 2010 23:28:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Денормализация связей многие-ко-многим, через битовые маски</title>
		<link>http://korchasa.ru/index.php/2009/05/%d0%b4%d0%b5%d0%bd%d0%be%d1%80%d0%bc%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d1%81%d0%b2%d1%8f%d0%b7%d0%b5%d0%b9-%d0%bc%d0%bd%d0%be%d0%b3%d0%b8%d0%b5-%d0%ba%d0%be-%d0%bc%d0%bd%d0%be%d0%b3/</link>
		<comments>http://korchasa.ru/index.php/2009/05/%d0%b4%d0%b5%d0%bd%d0%be%d1%80%d0%bc%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d1%81%d0%b2%d1%8f%d0%b7%d0%b5%d0%b9-%d0%bc%d0%bd%d0%be%d0%b3%d0%b8%d0%b5-%d0%ba%d0%be-%d0%bc%d0%bd%d0%be%d0%b3/#comments</comments>
		<pubDate>Mon, 04 May 2009 02:28:02 +0000</pubDate>
		<dc:creator>korchasa</dc:creator>
				<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[базы данных]]></category>
		<category><![CDATA[Добавить метку]]></category>
		<category><![CDATA[производительность]]></category>

		<guid isPermaLink="false">http://korchasa.ru/?p=240</guid>
		<description><![CDATA[Ситуация довольно банальная: есть, например, статьи и тэги, связанные многие-ко-многим, и необходимо быстро находить статьи с определенным тэгом или несколькими тэгами.]]></description>
			<content:encoded><![CDATA[<p>Ситуация довольно банальная: есть статьи и тэги, связанные многие-ко-многим, и необходимо быстро находить статьи с определенным тэгом или несколькими тэгами. Необходимо обойтись без JOIN и одним простым запросом.</p>
<p>В mysql есть <a href="http://dev.mysql.com/tech-resources/articles/mysql-set-datatype.html">тип данных set</a>, который вполне для этого подходит. Но можно и ручками</p>
<p>Посмотрим взлетит оно или нет:</p>
<pre lang="mysql">CREATE TABLE  `tests`.`article` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `mask` int(10) unsigned default NULL,
  `cset` set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20') default NULL,
  PRIMARY KEY  (`id`),
  KEY `mask` (`mask`),
  KEY `cset` (`cset`)
) ENGINE=InnoDB;</pre>
<p>Добавление записей:</p>
<pre lang="mysql">INSERT INTO article VALUES(NULL, 3, '1,2');</pre>
<p>Выбор по одному тэгу:</p>
<pre lang="mysql">select count(*) from article where mask & 1; //помеченные тэгом #1
select count(*) from article where cset & 1;</pre>
<p>Выбор по нескольким тэгам &#8211; объединение:</p>
<pre lang="mysql">select count(*) from article where mask & 3; //помеченные тэгом #1 ИЛИ #2
select count(*) from article where cset & 3;</pre>
<p>Выбор по нескольким тэгам  &#8211; пересечение:</p>
<pre lang="mysql">select count(*) from article where mask &#038; 1 AND mask & 2; //помеченные и  тэгом #1 И тэгом #2
select count(*) from article where cset &#038; 1 AND cset & 2;</pre>
<p>По скорости варианты равноценны, и на табличке с 500К записей (20 разных тэгов, по 1-20 тэгов на статью) все запросы обрабатывались за, примерно, 0.3 секунды, на средненькой домашней машинке.</p>
]]></content:encoded>
			<wfw:commentRss>http://korchasa.ru/index.php/2009/05/%d0%b4%d0%b5%d0%bd%d0%be%d1%80%d0%bc%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d1%81%d0%b2%d1%8f%d0%b7%d0%b5%d0%b9-%d0%bc%d0%bd%d0%be%d0%b3%d0%b8%d0%b5-%d0%ba%d0%be-%d0%bc%d0%bd%d0%be%d0%b3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
