<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Почему при использовании оператор IN пропадает индекс?</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/8349.html</link>
    <description>Доброго времени суток!&lt;br&gt;&lt;br&gt;Есть таблица. И два запроса:&lt;br&gt;&lt;br&gt;select id FROM articles WHERE id in ( 45, 46);&lt;br&gt;select id FROM articles WHERE id IN(SELECT 45 union SELECT 56);&lt;br&gt;&lt;br&gt;В первом случае стоимость (cost) 1.82. В таблице articles используется Primary Index и идет Index Range Scan .&lt;br&gt;&lt;br&gt;Во втором случае стоимость (cost) 2003.22. В таблице используется другой индекс и идет Full Index Scan.&lt;br&gt;&lt;br&gt;Откуда такая разница и как заставить второй запрос использовать Primary Index?&lt;br&gt;&lt;br&gt;</description>

<item>
    <title>Почему при использовании оператор IN пропадает индекс? (Tron is Whistling)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/8349.html#5</link>
    <pubDate>Tue, 20 Jun 2023 05:27:21 GMT</pubDate>
    <description>Дать index hint пробовали?&lt;br&gt;</description>
</item>

<item>
    <title>Почему при использовании оператор IN пропадает индекс? (Дмитрий)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/8349.html#4</link>
    <pubDate>Mon, 19 Jun 2023 08:11:50 GMT</pubDate>
    <description>&amp;gt; У вас теоретический вопрос или практический?&lt;br&gt;&lt;br&gt;Практический. Сам запрос достаточно сложный, чтобы его приводить, я выдернул упрощенный образец от туда.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Почему при использовании оператор IN пропадает индекс? (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/8349.html#3</link>
    <pubDate>Mon, 19 Jun 2023 08:05:17 GMT</pubDate>
    <description>У вас теоретический вопрос или практический? &lt;br&gt;&lt;br&gt;&amp;gt;как заставить второй запрос использовать Primary Index?&lt;br&gt;&lt;br&gt;Самое главное правило при написании запросов - не пытаться плохие запросы оптимизировать и заставлять что-то использовать. Пишите запросы, у которых будет оптимальный план.&lt;br&gt;Фактически вам нужен джойн к временной таблице составленной с помощью UNION. Значит надо написать к ней джойн, а не мутить с IN. &lt;br&gt;&lt;br&gt;Чисто в практической плоскости. Если у вас в articles будет за все время жизни сервиса 1000 записей, а в том, из чего вы юнион собираете - и того меньше, вам должно быть все равно, у вас фулл индекс скан или что-то другое. Добавьте памяти под кэш запросов и забудьте навсегда. Напишите запросы попроще, чтобы через пару лет не путаться в их логике. По моему личному опыту - до 2-3 сотен тысяч записей таблицы не тормозят даже если из них выбирают крайне неоптимальным образом.&lt;br&gt;</description>
</item>

<item>
    <title>Почему при использовании оператор IN пропадает индекс? (ыы)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/8349.html#2</link>
    <pubDate>Mon, 19 Jun 2023 07:14:13 GMT</pubDate>
    <description>&amp;gt; Доброго времени суток!&lt;br&gt;&amp;gt; Есть таблица. И два запроса: &lt;br&gt;&amp;gt; select id FROM articles WHERE id in ( 45, 46); &lt;br&gt;&amp;gt; select id FROM articles WHERE id IN(SELECT 45 union SELECT 56); &lt;br&gt;&amp;gt; В первом случае стоимость (cost) 1.82. В таблице articles используется Primary Index &lt;br&gt;&amp;gt; и идет Index Range Scan .&lt;br&gt;&amp;gt; Во втором случае стоимость (cost) 2003.22. В таблице используется другой индекс и &lt;br&gt;&amp;gt; идет Full Index Scan.&lt;br&gt;&lt;br&gt;Какой &quot;другой&quot; ?&lt;br&gt;&lt;br&gt;&amp;gt; Откуда такая разница &lt;br&gt;&lt;br&gt;На момент составления плана выполнени запроса- количество возвращаемых подзапросом значений неизвестно. И оптимизатор берет необходимые параметры &quot;с потолка&quot;. Проведя достаточное колдичество экспериментов с разными данными - вы поймете что статистически - он прав.&lt;br&gt;&lt;br&gt;&amp;gt; и как заставить второй запрос использовать Primary Index?&lt;br&gt;&lt;br&gt;для конкретно двух этих значений?&lt;br&gt;</description>
</item>

<item>
    <title>Почему при использовании оператор IN пропадает индекс? (Сергей)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID8/8349.html#1</link>
    <pubDate>Sun, 18 Jun 2023 08:12:17 GMT</pubDate>
    <description>&amp;gt; Доброго времени суток!&lt;br&gt;&amp;gt; Есть таблица. И два запроса: &lt;br&gt;&amp;gt; select id FROM articles WHERE id in ( 45, 46); &lt;br&gt;&amp;gt; select id FROM articles WHERE id IN(SELECT 45 union SELECT 56); &lt;br&gt;&amp;gt; В первом случае стоимость (cost) 1.82. В таблице articles используется Primary Index &lt;br&gt;&amp;gt; и идет Index Range Scan .&lt;br&gt;&amp;gt; Во втором случае стоимость (cost) 2003.22. В таблице используется другой индекс и &lt;br&gt;&amp;gt; идет Full Index Scan.&lt;br&gt;&amp;gt; Откуда такая разница и как заставить второй запрос использовать Primary Index?&lt;br&gt;&lt;br&gt;у вас есть стоимость, то наверняка можно посмотреть и план оптимизатора, а так, во в втором случае имеем запрос и оптимизатор считает его неопределенным, посему на каждую строчку &quot;глобального&quot; select&apos;а его надо определить... т.е. выполнить сканированием всей таблицы...&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
