Здравствуйте!У меня возникла проблема следующего плана:есть таблица шириной 20 колонок в которой 15789 записей.Выборка уже стала слишком долго(почти 1 сек) и я решила как-то упростить эту таблицу.Но дело в том что все колонки,кроме первой и последней используются при поиске(каждая из этих колонок как критерий,в одном случае могут одну колонку использовать,в другом несколько,а могут и вообще все использовать-если соответствие найдется конечно).Так как же лучше все-таки разбить эту таблицу,чтобы и была попроще,и выборка шла побыстрей.Спасибо.
P.S.Сначала пробовала через промежуточные таблицы,но у меня по ним вообще нет опыта и все завалилось,при поиске в Google хорошего материала по этой теме не нашла,поэтому если есть у кого-нибудь-поделитесь пожалуйста.
ну вы расскажите по подробнее что за данные в этой таблице, и как организован поиск
вообще 20х16000 - это "смешная" цифра для бд

___
индексы на всех полях стоят?
_____________
Стимулятор ~yoomoney - 41001303250491
Игорь_Vasinsky
7.06.2013 - 08:19
ужс.. 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
Цитата |
ну вы расскажите по подробнее что за данные в этой таблице |
ну это информация о файле,например длина,тип,расширение,платный или нет,где был замечен,компания-производитель,изображение и т.д
В любой строке все колонки заняты,то есть пустых нет.
Поиск организован самым простым образом,так как большинство данных текстовые то использую LIKE,для чисел-
SELECT *
FROM `keywords`
WHERE `keyword_id` =3
LIMIT 0 , 10
Цитата |
вообще 20х16000 - это "смешная" цифра для бд |
может и смешная,но у меня БД от нее тяжко работает..
Цитата |
индексы на всех полях стоят? |
у меня больше половины колонок текстовые данные,UNIQUE ставить не стала,так как данные могут дублироваться,а INDEX я не придумала как использовать :( :( :(
Цитата |
а чёж ты с умом не подошла к проетированию БД то ? есть же понятия нормализаци |
нет,я сначала вообще мало колонок сделала-всего 5жа потом резко понадобилось добавлять дополнительную информацию о файле,ранее созданные колоноки для этих целей не могли подходить,и я решила пока так оставить,а потом данные добавлялись,а к БД руки как-то не доходили,а вот недавно заметила долгую выборку и пошло-поехало.
Цитата |
и это просто выборка тормозит? не поиск? |
все тормозит :( :( :(
P.S.Честно говоря,у меня было мало практики,да и теории создания и проектирования больших,сложных БД,если есть у кого-нибудь материалы по этой теме,можете поделиться,просто в Google нет информации по проектированию больших БД,так-то все разбирается,но для маленьких или вообще тестовых таблиц.
Игорь_Vasinsky
7.06.2013 - 09:10
сейчас есть возможность поменять структуру БД ?
_____________
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
сначала таблицу создала вот примерно так:
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
7.06.2013 - 09:35
тогда надо взять твои 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
Цитата |
организовать связи таблиц |
промежуточные таблицы,да?
Цитата |
надо взять твои 20 колонок и логически разбить на несколько таблиц |
а как тогда поиск по колонкам делать?
Игорь_Vasinsky
7.06.2013 - 10:04
нееет не промежуточные
и поиск организовать тоже не проблема.
смотри, например есть таблица пользователей
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
Игорь_Vasinsky
что-то похожее я тоже хотела и сделать.но мало знаний,а тогда каким образом работать с JOIN ?Связывать запросы в разные таблицы?
Игорь_Vasinsky
7.06.2013 - 12:18
да 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
Цитата |
да JOIN поможет сделать запрос сразу в несколько таблиц одним разом |
а я думала-гадала,как же сделать поиск по нескольким таблицам,а вот оно,все есть оказывается.
P.S.
Игорь_Vasinsky,у Вас нет хорошей информации по JOIN?(я конечно сама поищу,но вдруг тоже когда-то интересовались и сохранили к себе),поделитесь пожалуйста.
Игорь_Vasinsky
7.06.2013 - 12:44
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
sergeiss
7.06.2013 - 16:32
Прочитал всю тему и нифига не понял. Нафига дробить таблицу, в которой всего 20 колонок? Извращение какое-то. Надо просто правильно расставить индексы, да еще, может, проанализировать запросы на предмет оптимальности.
Нормализация хороша, когда у нас отношения один-ко-многим или что-то подобное. Но если один к одному, то "пляски с бубном" не нужны.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.