[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как лучше разбить БД с большим кол-вом колонок?
Страницы: 1, 2
Эли4ка
Здравствуйте!У меня возникла проблема следующего плана:есть таблица шириной 20 колонок в которой 15789 записей.Выборка уже стала слишком долго(почти 1 сек) и я решила как-то упростить эту таблицу.Но дело в том что все колонки,кроме первой и последней используются при поиске(каждая из этих колонок как критерий,в одном случае могут одну колонку использовать,в другом несколько,а могут и вообще все использовать-если соответствие найдется конечно).Так как же лучше все-таки разбить эту таблицу,чтобы и была попроще,и выборка шла побыстрей.Спасибо.
P.S.Сначала пробовала через промежуточные таблицы,но у меня по ним вообще нет опыта и все завалилось,при поиске в Google хорошего материала по этой теме не нашла,поэтому если есть у кого-нибудь-поделитесь пожалуйста.
Valick
ну вы расскажите по подробнее что за данные в этой таблице, и как организован поиск
вообще 20х16000 - это "смешная" цифра для бд smile.gif
___
индексы на всех полях стоят?

_____________
Стимулятор ~yoomoney - 41001303250491
Игорь_Vasinsky
ужс.. 20 колонок

а чёж ты с умом не подошла к проетированию БД то ? есть же понятия нормализаци

и это просто выборка тормозит? не поиск?

индексы расставлены?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Эли4ка
Цитата
ну вы расскажите по подробнее что за данные в этой таблице

ну это информация о файле,например длина,тип,расширение,платный или нет,где был замечен,компания-производитель,изображение и т.д
В любой строке все колонки заняты,то есть пустых нет.
Поиск организован самым простым образом,так как большинство данных текстовые то использую LIKE,для чисел-
SELECT *
FROM `keywords`
WHERE `keyword_id` =3
LIMIT 0 , 10

Цитата
вообще 20х16000 - это "смешная" цифра для бд

может и смешная,но у меня БД от нее тяжко работает..
Цитата
индексы на всех полях стоят?

у меня больше половины колонок текстовые данные,UNIQUE ставить не стала,так как данные могут дублироваться,а INDEX я не придумала как использовать :( :( :(
Цитата
а чёж ты с умом не подошла к проетированию БД то ? есть же понятия нормализаци

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

все тормозит :( :( :(
P.S.Честно говоря,у меня было мало практики,да и теории создания и проектирования больших,сложных БД,если есть у кого-нибудь материалы по этой теме,можете поделиться,просто в Google нет информации по проектированию больших БД,так-то все разбирается,но для маленьких или вообще тестовых таблиц.
Игорь_Vasinsky
сейчас есть возможность поменять структуру БД ?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Эли4ка
сначала таблицу создала вот примерно так:
CREATE TABLE IF NOT EXISTS `keyword` (
`keyword_id` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(255) DEFAULT NULL,
`fulltxt` mediumtext,
`size` float DEFAULT NULL,
`hash` varchar(32) DEFAULT NULL,
PRIMARY KEY (`link_id`),
KEY `description` (`description`),
KEY `md5key` (`hash`)
)
ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=15789 ;

Да,сейчас есть возможность поменять структуру.
Игорь_Vasinsky
тогда надо взять твои 20 колонок и логически разбить на несколько таблиц
организовать связи таблиц
расставить индексы к полям

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Эли4ка
Цитата
организовать связи таблиц

промежуточные таблицы,да?
Цитата
надо взять твои 20 колонок и логически разбить на несколько таблиц

а как тогда поиск по колонкам делать? sad.gif
Игорь_Vasinsky
нееет не промежуточные

и поиск организовать тоже не проблема.


смотри, например есть таблица пользователей

id юзера | мыло юзера | логин юзера | пароль юзера | Имя юзера | Фамилия юзера | Страна юзера | город юзера | адрес юзера | акк vk.com | акк facebook | ICQ | телефон

вот скока данных.

но логичней разбить данные на группы

Учётные данные юзера

id юзера | логин юзера | пароль юзера

Личные данные

id юзера | Имя юзера | Фамилия юзера

контактные данные

id юзера | мыло юзера | ICQ | телефон

Гео данные

id юзера | Страна юзера | город юзера | адрес юзера

Соц сети

id юзера | акк vk.com | акк facebook


Что звязывает все таблицы между собой? id юзера

И всё. работать, например с JOIN

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Эли4ка
Игорь_Vasinsky
что-то похожее я тоже хотела и сделать.но мало знаний,а тогда каким образом работать с JOIN ?Связывать запросы в разные таблицы?
Игорь_Vasinsky
да JOIN поможет сделать запрос сразу в несколько таблиц одним разом

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Эли4ка
Цитата
да JOIN поможет сделать запрос сразу в несколько таблиц одним разом

а я думала-гадала,как же сделать поиск по нескольким таблицам,а вот оно,все есть оказывается.
P.S. Игорь_Vasinsky,у Вас нет хорошей информации по JOIN?(я конечно сама поищу,но вдруг тоже когда-то интересовались и сохранили к себе),поделитесь пожалуйста. rolleyes.gif rolleyes.gif
Игорь_Vasinsky
http://www.anton-pribora.ru/articles/mysql/mysql-join

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Эли4ка
Игорь_Vasinsky
спасибо.
sergeiss
Прочитал всю тему и нифига не понял. Нафига дробить таблицу, в которой всего 20 колонок? Извращение какое-то. Надо просто правильно расставить индексы, да еще, может, проанализировать запросы на предмет оптимальности.

Нормализация хороша, когда у нас отношения один-ко-многим или что-то подобное. Но если один к одному, то "пляски с бубном" не нужны.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.