|
|
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
mysql v4.0.20 Есть таблица t1(id int, str text, key(id)); - тип MyISAM. 100 000 записей, если выполнить "select * from t1 order by str", то думает 20сек. Основной вопрос : "Как ускорить процесс?". Создал индекс : create index istr on t1(str(10)) - производительности не заметил, кроме того, expain говорит, что индекс в запросе не используется, что по мне странно... , но даже принудительное (force index) использывание не дает эффекта. Замена типа str на varchar(30) принесла результат, но 2сек - тоже время, к тому же если база увеличится(что обычно бывает), то время, конечно, вырастет. Есть ли у кого идеи о том, как ускорить процесс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2004, 19:56 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
А можно поинтересоваться с какой целью надо часто доставать все строки таблицы? -- http://jcatki.no-ip.org/c++/bart.jpg ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2004, 21:45 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
сортируются с использованием индекса только поля объявленные как NOT NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2004, 22:06 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
i9Есть ли у кого идеи о том, как ускорить процесс? Никак. Твой запрос подразумевает полное чтение таблицы, так что ускорить его можно только уменьшив таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2004, 23:53 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
Александр Прокопюксортируются с использованием индекса только поля объявленные как NOT NULL Откуда такая информация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 00:53 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
sky2kА можно поинтересоваться с какой целью надо часто доставать все строки таблицы? обычное приложение которое отображает таблицу(большую) если не через курсоры, то когда пользователь жмет на "сортировать по" сортирует клиент, а если через курсоры, то сортирует уже сервер. Склоняюсь понятное дело ко второму варианту, т.к. не охота прокачивать всю таблицу по сети => нужно чтоб сервер быстро и часто сортировал. PS клиент не один, и как часто он будет нажимать на сортировку знает только он ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 10:14 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
Sad Spirit i9Есть ли у кого идеи о том, как ускорить процесс? Никак. Твой запрос подразумевает полное чтение таблицы, так что ускорить его можно только уменьшив таблицу. Но одно дело сравнивать строки(не используя индексы), а другое целые числа(используя индексы)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 10:24 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
Александр Прокопюксортируются с использованием индекса только поля объявленные как NOT NULL Проверил на id NOT NULL, id у меня есть ключ, следовательно, он проиндексирован, так "explain select ... order by id" так же говорит о неиспользовании индексов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 10:36 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
Так что, неужто MySQL не умеет сортировать по индексам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 15:44 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
А с какой стати такой запрос будет использовать индекс istr? Istr индексирует только первые 10 символов. А сортировать надо по всему полю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 16:12 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
замените на varchar(30), и попробуйте select * from t1 force index (istr) order by str; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 16:14 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
Хрензамените на varchar(30), и попробуйте select * from t1 force index (istr) order by str; Неа, не хочет и с varchar + force использовать индекс. Использует только когда int + force, и то производительность аж на 6% улучшается :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 17:34 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
Это как это? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 18:09 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
i9Так что, неужто MySQL не умеет сортировать по индексам? Всё он может, просто читать надо http://dev.mysql.com/doc/mysql/ru/ORDER_BY_optimisation.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 18:10 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
mysqlWith EXPLAIN SELECT ... ORDER BY, you can check whether MySQL can use indexes to resolve the query. It cannot if you see Using filesort in the Extra column. Что значит - не встретил ты в Extra column текста Using filesort - значит всё ОК! А насчёт значений NULL в индексных полях - это было только в 4.0.х версиях. mysql 4.0.11Ниже приведены некоторые случаи, когда MySQL не может использовать индексы, чтобы выполнить ORDER BY: ... Столбцы индекса могут содержать значения NULL, и используется ORDER BY ... DESC. Это объясняется тем, что в SQL значения NULL всегда сортируются в первую очередь, независимо от того, используется DESC или нет. Сейчас уже не нахожу по хелпу. Упс, оно только в случае DESC не использует... Причём я реально видел как, меняя определение поля на NOT NULL, EXPLAIN выдавал использование индексов. Кроме того, если не используется индекс - надо увеличить значение переменной sort_buffer, если данных будет больше этого значения - используется не совсем приятный алгоритм filesort. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2004, 23:40 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
Александр Прокопюк Кроме того, если не используется индекс - надо увеличить значение переменной sort_buffer, если данных будет больше этого значения - используется не совсем приятный алгоритм filesort. Кроме того, если не используется индекc - полюбому filesort ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 00:18 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
sky2k Александр Прокопюк Кроме того, если не используется индекс - надо увеличить значение переменной sort_buffer, если данных будет больше этого значения - используется не совсем приятный алгоритм filesort. Кроме того, если не используется индекc - полюбому filesort Ставил sort_buffer по размеру, превышающему базу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 10:52 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
ХренА с какой стати такой запрос будет использовать индекс istr? Istr индексирует только первые 10 символов. А сортировать надо по всему полю. Похоже на то, только жалко, получается, что мусклу слабо сортьровать сперва по индексу из 10 символов, а затем, если получаются спорные моменты доводить дело по полному полю... Ведь быстродействие сортировки зависит от длины строк, а тут получается, что нет разницы будет оно сортироваться по индексам или по полям целиком(раз уж мускл требует индексы такой же длины), следовательно, по времени выиграша не будет, и, следовательно, оптимизатор не будет использовать индексы, а раз так, то зачем мне их использовать? Знаю, б-деревья и все такое, но почему-то на практике у меня получилось : 0.3сек - без индексов и 0.32сек с индексами... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 11:04 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
ХренЭто как это? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Глюк один обнаружился - в доках находил что для строк индексы мол нужно делать меньшей длины, вот я и делал index(10) на varchar(30), т.е. теперь да, действительно с force index индекс используется, но как я кому-то ответил: 0.3сек против 0.32сек - результат почему-то не в пользу использования индексов..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 11:09 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
i9но как я кому-то ответил: 0.3сек против 0.32сек - результат почему-то не в пользу использования индексов..? при использовании индекса читается вся таблица и весь индекс, при неиспользовании индекса --- только вся таблица... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 18:03 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
Стоп стоп. Откуда взялась цифра 0.3 сек? В исходном собщении было что при полном сканировании эти 100000 записей сортировались за 20 сек. Как вы измеряете? У вас там query cache случаем не включен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2004, 18:24 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
Sad Spirit i9но как я кому-то ответил: 0.3сек против 0.32сек - результат почему-то не в пользу использования индексов..? при использовании индекса читается вся таблица и весь индекс, при неиспользовании индекса --- только вся таблица... это понятно, не понятно почему выигрыша нет при использовании индексов, а только накладные расходы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 10:22 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
ХренСтоп стоп. Откуда взялась цифра 0.3 сек? В исходном собщении было что при полном сканировании эти 100000 записей сортировались за 20 сек. Как вы измеряете? У вас там query cache случаем не включен? нет, кэш не включен, 0.3 взялось, так как я переделал тип полей с text на varchar(30), соль-то в том, что разница между "с" и "без" индексов не та, которую хотелось бы видеть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 10:26 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
i9 ХренСтоп стоп. Откуда взялась цифра 0.3 сек? В исходном собщении было что при полном сканировании эти 100000 записей сортировались за 20 сек. Как вы измеряете? У вас там query cache случаем не включен? нет, кэш не включен, 0.3 взялось, так как я переделал тип полей с text на varchar(30), соль-то в том, что разница между "с" и "без" индексов не та, которую хотелось бы видеть... Вы писали (не отпирайтесь) i9Замена типа str на varchar(30) принесла результат, но 2сек - тоже время, к тому же если база увеличится(что обычно бывает), то время, конечно, вырастет. Так где правда? по поводу 0.3 на индекс и fullscan - то 100000 это не тот размер на котором можно проводить тестирование. У вас эта таблица где-нибудь в кэше файловой системы, или scsi диска или еще в каком нибудь кэше лежит, и вы получаете такие результаты. Обычно чтобы уменьшить погрешность от кэшей употребляется размер таблицы в 3 раза превышающий размер RAM. попробуйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 13:54 |
|
||
|
order by и индексы
|
|||
|---|---|---|---|
|
#18+
ХренВы писали (не отпирайтесь) Так где правда? Если я Вас запутал, то не обижайтесь плз. просто уже 3 дня с этим воюю, естественно, не сидел и не ждал ответов, перепробывал всякие типы, таблицы, запросы отсюда и разное время. Еще раз прошу прошения, если запутал, просто считал подать публике относительную разницу. Хренпо поводу 0.3 на индекс и fullscan - то 100000 это не тот размер на котором можно проводить тестирование. У вас эта таблица где-нибудь в кэше файловой системы, или scsi диска или еще в каком нибудь кэше лежит, и вы получаете такие результаты. Обычно чтобы уменьшить погрешность от кэшей употребляется размер таблицы в 3 раза превышающий размер RAM. попробуйте. С теорией не поспорю, тут Вы пожалуй правы. Гектарной базы, к сожалению у меня нет, посему, видимо, эта тема остается или до того, как база подрастет, или у кого-то найдется база и желание продолжать тему... P.S.вообще Всем спасибо и за смену text на varchar, пустяк вроде, а намного лучше стало... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2004, 17:26 |
|
||
|
|

start [/forum/topic.php?fid=47&startmsg=32751905&tid=1854670]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
139ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 438ms |

| 0 / 0 |
