- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Друзья, объясните, когда можно использовать один KEY для двух значений?
Когда это имеет смысл.
Если индекс типа country+phone, то поиск where country+phone будет эффективнее остальных вариантов.
Однако where phone будет без индекса вообще, а where country будет менее эффективным.
Так же phone+country скорее всего (в зависимости от оптимизатора скл) работать не будет с таким индексом.
Если я хочу, чтобы целый номер country + phone был уникальным, по аналогии, нужно создавать один ключ UNIQUE?
Да, верно.
---------- Добавлено 13.09.2013 в 21:07 ----------
int.
Храните номера в соответствии со стандартом E.164. Символы, отличные от цифр, не нужны.
1-800-MY-APPLE ?
1-800-MY-APPLE ?
Тоже об этом подумал. Вот как раз от таких казусов и защищает стандарт. Прикольно, но тем у кого, номер означает GJDKFJJ не очень. :)
а where country будет менее эффективным
Это почему, если используется первая часть индекса?
Так же phone+country скорее всего (в зависимости от оптимизатора скл) работать не будет с таким индексом.
Вообще-то говорят что в данном случае будет.
Тоже об этом подумал. Вот как раз от таких казусов и защищает стандарт. Прикольно, но тем у кого, номер означает GJDKFJJ не очень. :)
К номеру gjdkfjj наверняка можно подобрать более красивую расшифровку:) Фокус-то в том, что одной цифре соответствуют 3 буквы на выбор.
Это почему, если используется первая часть индекса?
Потому что индекс на country+phone, а не на country. Избыточность менее эффективна.
Вообще-то говорят что в данном случае будет.
В зависимости от оптимизатора sql. Не зря в мануалах специально указывают, что если хочется гарантированно использовать составной индекс, то в where нужно использовать тот же порядок, что и при задании индекса.
Избыточность менее эффективна.
Результат составного индекса
и результат простого индекса
и честно говоря не вижу особой разницы. В таблице 100K записей
Результат составного индекса
и честно говоря не вижу особой разницы. В таблице 100K записей
Из сказанного Вами прямо следует, что простые индексы использовать крайне глупо, ведь они "то же самое, только без бонусов составных". В подобном выводе есть легкий оттенок нелогичности, Вы так не считаете? :) Коронной идеей в данном случае будет повесить составной индекс на все поля сразу, пусть будет типа.
Еще раз - составной индекс - избыточен по отношению к простому. Это факт. Избыточность это плохо. Это тоже факт. Можно несколько поспорить на тему насколько это плохо, но это отдельный вопрос.
Что касается теста - забейте таблицу разными данными в индексируемых полях, забейте туда десяток миллионов записей, пусть размер будет хотя бы пара гигов для индексов и 10 для базы, протестируйте запросом на выборку с benchmark 10000 а не разовым sql_no_cache, посчитайте время построения индекса заодно, не забудьте протестировать скорость вставках с тем же бенчмарком - тогда это будет тест что-то показывающий. А пара одиночных запросов на неизвестно каких данным, на крошечных индексах и неизвестно как закэшированных данных (ФС тоже кэширует) - это не тест, а фикция.
edogs, стоп-стоп. Простой это отдельный индекс для каждого поля, составной это индекс для более одного поля, верно?
Из сказанного Вами прямо следует, что простые индексы использовать крайне глупо
Не глупо. использовать простой индекс там, где нужен составной... Хотя не знаю, спорить не буду, может на пару десятков миллиардов записей и есть смысл делать отдельный простой индекс по мимо составного. С такими объемами не работал.
edogs, стоп-стоп. Простой это отдельный индекс для каждого поля, составной это индекс для более одного поля, верно?
Да.
Не глупо. использовать простой индекс там, где нужен составной... Хотя не знаю, спорить не буду, может на пару десятков миллиардов записей и есть смысл делать отдельный простой индекс по мимо составного. С такими объемами не работал.
Тут даже дело не столько в больших данных, сколько в самом принципе тестирования.
99% что у Вас весь индекс, что составной что простой, в оперативке. Значит разница даже многократная по доступу к нему - в пределах погрешности будет, особенно с учетом того что на таблице в 100к записей и целочисленном индексе - пара мегабайт дай бог объем индекса. Опять же ОС может кэшировать дисковые операции, т.е. sql_no_cache особо не решает.
Нельзя так тестить в принципе, можно получить результаты с точностью до противоположных.
edogs, а смысл индекса KEY, который не в оперативке?