|
|
|
| Добрый день.
Вот мне хостер, прислал письмо, плиз объясните чего он от меня хочет!
В правильно спроектированной базе не должно происходить сканов. Нужные
данные должны выбираться по индексам. А у вас сейчас большая часть
запросов производит сканы, т.е. вместо того, чтобы мгновенно выбрать из
таблицы нужные записи по индексу, мускулу приходится производить
чрезвычайно долгое и ресурсоемкое сканирование всей таблицы.
Пожалуйста, создайте в таблицах индексы на тех полях, по которым
производится выборка записей.
|
Что значит "индексы" это имеется ввиду цифры, буквы или что? + к этому, я не понимаю, если я допустим пишу Select id, date,time where razdel='1'; он же в любом случае, будет делать скан! Или нет?
Как нужно верно строить структуру? | |
|
|
|
|
|
|
|
для: Diablo_
(18.12.2006 в 16:54)
| | В программе по упр. БД (обычно phpmyadmin) сделайте индексы полей, там опция такая есть | |
|
|
|
|
|
|
|
для: stalk3r
(18.12.2006 в 17:05)
| | а можно подробнее?
если вы имеете ввиду INDEX то они везде где нужно, назначены | |
|
|
|
|
|
|
|
для: Diablo_
(18.12.2006 в 17:07)
| | То есть, если я правельно понял, то INDEX должен быть установлен у тех полей, по котрым идёт выборка в базе?! | |
|
|
|
|
|
|
|
для: Diablo_
(18.12.2006 в 16:54)
| | Хостер, вместо того, чтобы думать мозгами и объяснить вам что требуется, хочет чтобы вы научились икусству оптимизации базы данных. Т.е. проиндексировали таблицы таким образом, чтобы полных сканов таблиц не было. В этом случае лучше всего индексировать таблицы и поминутно (проявляя не терпение) спрашивать не стало ли лучше, и если не стало, то как лучше поступить.
Если серьёзно, то индексы действительно хорошо работают для оптимизации выборки. Если у вас в WHERE-условии в основном используется лишь один столбец - индексируйте только его, если два, то создавайте один индекс по двум столбцам, если три - по трём и т.д., пока хостер не успокоится или наоборт... :))) | |
|
|
|
|
|
|
|
для: cheops
(18.12.2006 в 22:51)
| | Если не сложно, ответьте на пару вопросов:
1. индексировать, нужно только в случае "where", или ещё и в случае order и тд..
2. я заметил, что можно индексировать два и три и более полей! зачем это? | |
|
|
|
|
|
|
|
для: Diablo_
(18.12.2006 в 23:54)
| | 1. Да можно и order, но это обычно не так актуально, как where-условия
2. Дело в том, что когда у вас двойное условие
WHERE id = 3 AND id_sub = 45
|
то индекс эффективнее работает, когда он построен на двух столбцамх id и id_sub, если у вас два индекса id и id_sub, то работать скорее всего будет только один из них - id (и то без гарантии). Если у вас имеется индекс по двум столбцам id и id_sub, то при выполнении запроса с WHERE-условием, приведённым выше, такой индекс гарантировано будет использоваться. Никто не мешает создать три индекса, по столбцу id, по столбцу id_sub и по двум столбцам id и id_sub. Однако следует помнить, что каждый индекс замедляет операции вставки, удаления и обновления записей. | |
|
|
|
|
|
|
|
для: cheops
(19.12.2006 в 01:12)
| | а что нужно писать в поле "Количество элементов" какое количество? | |
|
|
|
|
|
|
|
для: Diablo_
(19.12.2006 в 01:34)
| | Это где? Какой клиент используется? | |
|
|
|
|
|
|
|
для: cheops
(19.12.2006 в 01:44)
| | мускул 4.0
при создании индекса там можно указать кол-во элементов | |
|
|
|