Индексы

m2k

Новичок
Индексы

есть таблица 23поля(пока 23 в последуюущем возможно расширение) таблица с товарами предположительное кол-во записей около 100.000 по любому полю может производится выборка как по 1 так и по нескольким... так вот я хотел узнать как лучше назначить индексы и какой тип таблицы использовать чтобы всё это работало хотябы со средней скоростью и не грузилось по несколько минут при поиске товара.... вот спасибо за внимание .... если ктонить даст линк на мануал (с примерами жизненными) то буду очень благодарен....
 

m2k

Новичок
ок.
так лучше создать индексы для каждого поля в отдельности если возможен поиск как по каждому в отлельности так и по нескольким полям?
и какой тип таблицы лучше использовать...
 

Profic

just Profic (PHP5 BetaTeam)
23+ поля имхо очень много.
это разные характеристики товаров? если да, поищи по форуму. здесь примеров организации хранения атрибутов товаров как собак нерезаных
 

Cougar

Кошак
m2k
Тип таблицы - скорее всего MyISAM. Индексы делай в зависимости от того, по каким критериям чаще всего делаешь выборки. Скажем, если очень часто используется выборка по id и цене - уместно будет создать один индекс по этим двум полям. И так далее...
 

Demiurg

Guest
Cougar
ты знаешь, чем отличаются индексы по одному полю от составных индексов ?
 

Cougar

Кошак
Demiurg
Дык (я так думаю). Иначе бы не советовал.
Хотя, я, наверное, забыл сказать m2k, что составные индексы имеют смысл только тогда, когда в условии WHERE используются все поля индекса (или только первое).
Вроде так?
 

m2k

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

Cougar

Кошак
m2k
А кто мешает сделать одновременно и индекс по одному полю, и составной?

PS: Спасибо Демиургу. Заставил меня полезть в ман по MySQL. Узнал много полезного :)
 

m2k

Новичок
да мне ничего не мешает) я просто узнаю как лучше будет )) а так я поступлю так как посоветуют профи) а ещё хотел узнать когда при создании таблицы пишеш INDEX(`поле1`,`поле2`...)
то получается что MySql создаёт составной индекс а как сделать чтобы при создании таблицы создавался индекс у каждова поля свой?...
 

Cougar

Кошак
[sql]
/*простой индекс*/
CREATE INDEX index_name ON table_name(field1);
/*составной индекс*/
CREATE INDEX index_name ON table_name(field1,field2);
[/sql]

PS: Я не профи, я только учусь :)
 

m2k

Новичок
а если у меня есть запрос вида ...WHERE id='1' AND on='1' AND size='468'...
и есть составной индекс из полей on и size поле on 1ое
а id это примари кей ну как обычно я хотел бы узнать будет ли работать индекс при таком условии точней будет ли он участвовать ?.... вот
 

Demiurg

Guest
ответ на твой вопрос может дать explain
Оптимизатор может решить, что индекс можно не использовать.
 

m2k

Новичок
тоесть нету однозначного ответа в зависимости от того как будет быстрей(по мнению оптимизатора) будет использоватся индекс или нет?
 

Demiurg

Guest
Для нескольких записей быстрее будет перебор, чем использование индекса.
 

m2k

Новичок
а киньте плиз ссылки где мона почитать или ткните носом туда где можно найти где можно почитать про то как лучше раскидать характеристики товара в разные таблицы ... я так думаю что в 1 таблице должа быть инфа которая показывается допустим в общем списке товаров 2я таблица там где каждый товар в отдельности а 3я это типа исчерпывающая инфа по товару(или доп. инфа)... я вообще думаю в правильном направлении?))
 
Сверху