Автор Тема: Что лучше SET или TINYINT???  (Прочитано 11677 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн qwer3d

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что лучше SET или TINYINT???
« : 20 Апреля 2008, 18:11:15 »
делаю таблицу.
Много полей в которых надо хранить простые числа (1,2,3 и т.д.)

в одном поле одно число.

Будет происходить поиск по этим полям.
Что лучше назначить тип поля set или tinyint?

если будет 50.000 записей то быстрей искаться будет по какому типу?

дело в том что не всегда будут забиты все поля информацией.
tinyint - если нечего не указано то всегда хранит НОЛЬ.
а set - может быть пустым полем.
тут и появляетсья разница в размере базы.
при tinyint --- размер 20 мегов
при set --- размер 8 мегов

с одной стороны set позволяет экономить место на жестком и вроде быстрей должен искать.

ЧТО БЫСТРЕЙ РАБОТАЕТ??? выборка по set или tinyint?

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Что лучше SET или TINYINT???
« Ответ #1 : 20 Апреля 2008, 23:31:40 »
А ЕСЛИ ПРОВЕРИТЬ СКОРОСТЬ ВЫБОРКИ?????????????????????

Оффлайн qwer3d

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что лучше SET или TINYINT???
« Ответ #2 : 21 Апреля 2008, 04:44:53 »
hanslinger

проведу. но вдруг есть официальная инфа по этим типам.

дело в том что если указать везде тип TINYINT ---- то в сам файл базы все будет писаться в одну строчку.
тем самым одна запись - одна строчка - это дает очень быструю скорость (проверял на другом проекте)

а вот если будет тип SET - то я не знаю как Мускул будет писать в сам файл базы.
Если запишет как две строчки:
1. это будет например id (INT)
2.а если он посчитает SET как текстовую то он ее перенесет на вторую строчку в файле

ну и само-сабой если он не посчитает SET как текстовую строчку, то он все запишет в одну строчку тем самым будет очень большая разница в скорости.

Известно точно, что типы BLOB, TEXT, VARCHAR и т.д. --- тоесть которые не имеют постоянной длины --- эти типы мускул записывает в несколько строк НА ОДНУ запись. Тем самым очень сильно падает скорость.

Я не зря задал этот вопрос так как тут уже получаеться на уровне физической записи данных и так же физ. чтения данных.
А это очень важно.

Я по этому форуму лазил и понял что очень многие на самом деле не умеют и не понимают для чего типы данных созданы в мускул.
тем самым допускают ошибки получая большую нагрузку на маленькие базы и т.д.

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что лучше SET или TINYINT???
« Ответ #3 : 21 Апреля 2008, 12:07:58 »
qwer3d
У Вас уже не первый пост по базам данных. все вопросы как раковая опухоль на здоровом теле - аномалия. Вы случаем не тестер? мне интересно к чему ваши исследования базы данных? innoDB myIsam, set - TINYINT, чем можно открыть файлы базы? очень странные вопросы. проясните цель исследований - интересно.

На мой взгляд. Большенство проблем в сложных проектах к коим могут относится проекты связаные с высокой нагрузкой.
Этап проектирования пропущен, уровень абстракции не достаточен. При достаточно быстрой реализации на начальной стадии вы можете получить загубленый в целом проект. Уровень абстракции было бы не плохо начать с проектрирования системы которая не зависила бы от платформы реализации.

если у вас уже есть эта система и вы уже реализуете ее на mysql то боюсь у вас больное место вскрывается. использование нестандартных методов - явный симптом болезни в целом. возможно вам следует пересмотреть сущности вашей системы. и добавить новые уровни абстракции данных которые упростили бы логику работы в целом

извините если не по теме.
убили кенни, сволочи

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что лучше SET или TINYINT???
« Ответ #4 : 21 Апреля 2008, 12:14:30 »
теперь по теме
ENUM(\'value1\',\'value2\',...)

An enumeration. A string object that can have
only one value, chosen from the list of
values \'value1\', \'value2\', ..., NULL or the special \'\' error value.
An ENUM column can have a maximum of 65,535 distinct
values. ENUM values are represented internally as integers.

SET(\'value1\',\'value2\',...)

A set. A string object that can have zero or more
values, each of which must be chosen from the list of
values \'value1\', \'value2\', ... A SET column can have a maximum of 64 members. SET values are represented internally as
integers.

TINYINT[(M)] [UNSIGNED] [ZEROFILL]

A very small integer. The signed range is -128 to 127. The
 unsigned range is 0 to 255.



выбирайте любой приемлемый и масштабируемый тип данных, все они int по сути дела. на мой взгляд на скорости это не отразиться. от себя хотел бы добавить что использование SET и Enum - лучше заменить на нормальные справочники - таблицы с данными. причина достаточная для этого изменения на мой взгляд следующая. если справочники будут меняться, вам не придется делать альтер тейбл, что может привезти к потере данных и не возможности откатиться без серьезных переделок в функционале уровня представления.
« Последнее редактирование: 21 Апреля 2008, 12:19:39 от ravshaniy »
убили кенни, сволочи

Оффлайн qwer3d

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что лучше SET или TINYINT???
« Ответ #5 : 21 Апреля 2008, 15:17:02 »
ravshaniy

проект пишу большой (как мне кажеться), я не тестер, не комерция, пишу для себя.
уже сделал движок и все базы.
все работает.
сейчас нахожусь на этапе оптимизации скриптов и баз
поэтому я и пытаюсь максимально докапаться до каждой мелочи.

планируемая нагрузка 10.000 онлайн пользователей при обновлении страниц -- 2 страницы в минуту на пользователя.
общее кол-во записей в каждой таблице около 200.000
всего 17 таблиц.
Этот вариант нагрузки я точно могу получить на данный момент, а что будет со временем - увелечение посещаемости - соответственно нагрузки.
поэтому это не конечные цыфры.

так же отдельно занимаюсь иследованием правильной настройки всего сервера, точнее двух именно под этот проект.
проект будет работать сразу на двух серверах.

при начальном создании проекта все было расписано и по базам и по скриптам.
но со временем реализации многое менялось.
поэтому первоначальные планы были изменены.

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что лучше SET или TINYINT???
« Ответ #6 : 21 Апреля 2008, 16:19:38 »
Цитировать
qwer3d:
сейчас нахожусь на этапе оптимизации скриптов и баз


То есть Вы хотите сказать что вы выявили узкие места в системе и как оказалось это база данных.

можно ли увидеть конкретные цифры? и конкретные тесты?

Вы один пишите серьезный проект в 17 таблиц и еще у вас два сервера на которых вы запустили этот проект. интересно

конечно же все эти вопросы не относятся к теме обсуждения предлагаю создать новую ветку. с тремя восклицательными знаками и со словами ИНТЕРЕСНО
убили кенни, сволочи

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Что лучше SET или TINYINT???
« Ответ #7 : 21 Апреля 2008, 16:39:41 »
Цитировать
с тремя восклицательными знаками и со словами ИНТЕРЕСНО

:)

Оффлайн qwer3d

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что лучше SET или TINYINT???
« Ответ #8 : 21 Апреля 2008, 17:10:02 »
по цифрам:
1. тест:  в базу загнал 50.000 записей во все 10 таблиц. запрос был таким, что из КАЖДОЙ таблице выбиралась часть определенных данных, при этом использовался LIMIT 10, тоесть  сразу 10 запесей надо было получить + выводилось общее кол-во запесей подходящих на заданные кретерии поиска + делался запрос на личные данные пользователя
Итог: скорость обработки запроса занимала от 5 до 6  секунд!!!
Я упал со стула когда это увидел. При этом надо учитывать, что сделал всеголишь как один  пользователь зашел на страницу поиска.

2. тест: поменял типы данных в таблице. было кажеться 10 таблиц.
Резко скорость упала до 1 секунды в среднем.

3. тест: информацию из 10 таблиц разбил еще на 7 таблиц - вот тут и получилось 17 в итоге. далее опять в некоторых столбцах поменял типы, по новой в каждой таблице передалал PRIMARY KEY. четко прописал длинну каждого типа. Так же передалал запросы к базе.  ну и еще вроде что-то по мелочам.
Итог: скорость обработки занимает 0.2 сек + теперь если делаеться 10 одновременных запросов скорость выдачи не более 0.5 сек. При этом база по размеру вырасла на половину!


На данный момент проект делаеться на железе: 300 Mhz, 64 оперативки, простой IDE HDD + на данном сервере забитый канал так как на нем висит база статистики на 120 сайтов. запросы к самому серверу идет около 5 в сек. Тоесть я на этот проект получаю относительно маленькие ресурсы.

Я  УВЕРЕН, ЧТО ЕСЛИ ЕЩЕ ПОРАБОТАТЬ НАД ЭТИМ ДЕЛОМ, ТО НА НЫНЕШНИХ РЕСУРСАХ Я СМОГУ ЕЩЕ БОЛЬШЕЙ СКОРОСТИ ДОБИТЬСЯ.

тем самым я понимаю что, когда я перенесу на нормальный сервер то скорость еще больше выростит. тем более если поставить скази

Когда проект будет запущен там будет форум+галерея+блоги


ВОТ ТАКИЕ ЧУДЕСА.

Проект пишу пол года, поэтому я считаю, что запросто можно написать большой проект одному человеку, включая базу + скрипты, учитывая что я сижу практически днем и ночью. уже даже русский забывать стал.

По поводу 2 серверов.
Тут все просто Один идет чисто под Мускул, а второй служит для загрузки ползователем дизайна, картинок и т.д. тоесть всякая фигня. в итоге получаеться что нагрузка на ресурсы + жесткий распределяется. так как каждый сервер выполняет только определенную задачу. В будущем когда запущу проект будет два полноценных быстрых сервера + каждых сервер будет иметь свой порт 100 Mb/s. НЕ путать с простым каналом, как многие хостеры пишут. тут полный канал 100 мегабит будет уходить на один сервер и 100 на другой. Серваки будут валяться в M9.

Вот такие дела..........................

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Что лучше SET или TINYINT???
« Ответ #9 : 21 Апреля 2008, 17:58:31 »
Ты с SQL тоже полгода назад познакомился?

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что лучше SET или TINYINT???
« Ответ #10 : 21 Апреля 2008, 23:23:09 »
по первому пункту.  прошу привести листинг этого запроса на обзор.

по второму пункту. исходная структура таблиц + структура таблицы после ваших изменений. /*лучше дамп структуры и можно хотя бы на одной таблице, не надо все десять если они не объединяются по логике запроса*/

по третьему пункту. УХ ТЫ! праймари кей только появился?



Цитировать
qwer3d:
На данный момент проект делаеться на железе: 300 Mhz, 64 оперативки
честно говоря впечитляет если он вообще стартует и если на нем хоть чтото крутится, кстати хоть чтото? версия бд пожалуста

форум галерея блоги - это и есть этот мощнейший проект? вы его на асемблере писали?

нет с русским у вас все впорядке. но мне кажется лучше читать пол года чем писать. Есть анекдот со схожей ситуацией, кажется главный герой счтитал себя не читателем, а писателем.

В общем ситуация оказалось менее интересной чем изначально. ситуация банальна, но вы оригинал. и кстати

Вы наверна крутой системщик. зачем Вам все это? такие хорошие знания про скази, про распредиление нагрузки, вы специально используете низкопроизводительное железо чтобы тестировать софт? может вам все же не писать крутые блоги уверен вас с удовольствием возьмут в любую крупную фирму тестером. у вас это врожденное
убили кенни, сволочи

Оффлайн Altaxar

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 222
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.moroseac.ru/
Что лучше SET или TINYINT???
« Ответ #11 : 22 Апреля 2008, 14:09:44 »
ravshaniy кажись прав, у тебя презвание быть тестером. И не надо говорить, что проект большой, слишком вызывающи выглядит. Например у меня в проекте 137 таблиц, 2 года работы, по твоей оценке как мой назвать? мега-проект :) .
Шутка, шуткой, но qwer3d молодец! написал проект, теперь его оттачивает, многие на данной ноте останавливаются.
Не все является тем чем кажется.

Оффлайн qwer3d

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 28
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что лучше SET или TINYINT???
« Ответ #12 : 22 Апреля 2008, 17:16:18 »
Цитировать

ravshaniy
по третьему пункту. УХ ТЫ! праймари кей только появился?


По поводу ключа. он с самого начала был.
но раньше я его только один делал и на ID.
а теперь праймари во многих табицах содержит не один столбец, а больше столбцов.



кстате не знаю важно это теперь или нет, но есть таблица по которой происходит поиск , она содержит 47 столбцов. и в ней тоже 50.000 записей.

дело в том что если просто делать SELECT по уже известным критериям, например на номеру пользователя - то все данные из всех таблиц я получаю за 0.002 сек. и даже меньше, короче тут проблем со скоростью нет.

проблемы возникают когда начинаешь по этим таблецам искать данные подходящие под критерии поиска.

поэтому мускул открывает все 17 таблиц, просматривает, ищет, делает подсчет, сводит записи по id и выводит.

видимо мне сразу надо было написать что делаю поиск, а не тупо СЕЛЕКТ.
А тут есть разница между простой выборкой и выборкой по многочисленным заданным критериям, при этом сам мускул у меня переводит возраст в дату рождения и делает на этом тоже вычисление и т.д.

Я не правильно начал. надо было сразу написать что я делаю поиск по таблицам. А я просто хотел уточнить, какой из типов быстрей работает.  Так как в документалке мало инфы по этому поводу.
Итог: при TINYINT ---- в 3 раза быстрей происходит INSERT, но поиск в 2 раза медленней
ну и само сабой SET ---- в 3 раза медленней INSERT, но зато в 2 раза быстрей поиск.


ааа и еще по поводу железа.
когда проект буду запускать на нормальных серверах, то на сервер мускула вешаеться 5-6 жестких, если будут деньги то и больше.

из этих жестких:  1- операционка.
а на отальные жесткие распределяються таблицы.
жесткие монтируються как папки, в итоге в мускуле остаются простые настройки, где лежат файлы баз.
получаем еще быстрей скорость + каждая таблица пишит и читает только себя так как на нее отдан целый жесткий.

ну и для смеха можно сказать, что теперь можно не бояться сколько весят таблицы %)

Цитировать
Altaxar
молодец! написал проект, теперь его оттачивает, многие на данной ноте останавливаются.


Согласен и дабавлю, что есть люди которые безусловно круче всех тут нас вместе взятых по мускулу рубят, НО!! их лень такая что они даже НЕ хотят думать о каких-то проектах, а тем более их воплощать. куда легче тупо сидеть получать запрлату и все.
Поэтому потом, эти крутые профи сидят и говорят, что можно было вообще все сделать по-другому!
НО, таким как я уже потом все равно так как проект работает, несет денег и такие как я ездиют на мэрсе, а они крутые и умные в мускуле - покупаю москвич.

hanslinger  в мускуле год. до этого я его тоже знал, но не составлял базы и ничего толком не писал, чисто для правки запросов для php использовал, установка на ос. Теперь взялся в серьез.

b]ravshaniy[/b] форум и галерея и т.д. - это будет как и на этом сайте - будет взят готовый форум. Постараюсь позже выложить дамп и т.д. просто я не за своим сейчас компом.

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Что лучше SET или TINYINT???
« Ответ #13 : 22 Апреля 2008, 18:46:35 »
Ну, раз всерьез, то изучи EXPLAIN.

Оффлайн ravshaniy

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 191
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Что лучше SET или TINYINT???
« Ответ #14 : 23 Апреля 2008, 10:51:45 »
Корень зла все же чаще встречается здесь.
Цитировать
qwer3d:
А тут есть разница между простой выборкой и выборкой по многочисленным заданным критериям, при этом сам мускул у меня переводит возраст в дату рождения и делает на этом тоже вычисление и т.д.


чем здесь
Цитировать
qwer3d:
какой из типов быстрей работает.


Оптимизация запросов - как Вы смотрите на изучение этого вопроса?
убили кенни, сволочи

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28