powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / order by и индексы
28 сообщений из 28, показаны все 2 страниц
order by и индексы
    #32751905
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
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сек - тоже время, к тому же если база увеличится(что обычно бывает), то время, конечно, вырастет.

Есть ли у кого идеи о том, как ускорить процесс?
...
Рейтинг: 0 / 0
order by и индексы
    #32751948
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно поинтересоваться с какой целью надо часто доставать все строки таблицы?

--
http://jcatki.no-ip.org/c++/bart.jpg
...
Рейтинг: 0 / 0
order by и индексы
    #32751950
сортируются с использованием индекса только поля объявленные как NOT NULL
...
Рейтинг: 0 / 0
order by и индексы
    #32751970
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i9Есть ли у кого идеи о том, как ускорить процесс?
Никак. Твой запрос подразумевает полное чтение таблицы, так что ускорить его можно только уменьшив таблицу.
...
Рейтинг: 0 / 0
order by и индексы
    #32751980
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Прокопюксортируются с использованием индекса только поля объявленные как NOT NULL

Откуда такая информация?
...
Рейтинг: 0 / 0
order by и индексы
    #32752198
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
sky2kА можно поинтересоваться с какой целью надо часто доставать все строки таблицы?

обычное приложение которое отображает таблицу(большую) если не через курсоры, то когда пользователь жмет на "сортировать по" сортирует клиент, а если через курсоры, то сортирует уже сервер. Склоняюсь понятное дело ко второму варианту, т.к. не охота прокачивать всю таблицу по сети => нужно чтоб сервер быстро и часто сортировал.
PS клиент не один, и как часто он будет нажимать на сортировку знает только он
...
Рейтинг: 0 / 0
order by и индексы
    #32752213
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
Sad Spirit i9Есть ли у кого идеи о том, как ускорить процесс?
Никак. Твой запрос подразумевает полное чтение таблицы, так что ускорить его можно только уменьшив таблицу.

Но одно дело сравнивать строки(не используя индексы), а другое целые числа(используя индексы)...
...
Рейтинг: 0 / 0
order by и индексы
    #32752239
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
Александр Прокопюксортируются с использованием индекса только поля объявленные как NOT NULL

Проверил на id NOT NULL, id у меня есть ключ, следовательно, он проиндексирован, так "explain select ... order by id" так же говорит о неиспользовании индексов
...
Рейтинг: 0 / 0
order by и индексы
    #32753125
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
Так что, неужто MySQL не умеет сортировать по индексам?
...
Рейтинг: 0 / 0
order by и индексы
    #32753212
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с какой стати такой запрос будет использовать индекс istr? Istr индексирует только первые 10 символов. А сортировать надо по всему полю.
...
Рейтинг: 0 / 0
order by и индексы
    #32753224
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
замените на varchar(30),
и попробуйте
select * from t1 force index (istr) order by str;
...
Рейтинг: 0 / 0
order by и индексы
    #32753479
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
Хрензамените на varchar(30),
и попробуйте
select * from t1 force index (istr) order by str;

Неа, не хочет и с varchar + force использовать индекс.
Использует только когда int + force, и то производительность аж на 6% улучшается :-(
...
Рейтинг: 0 / 0
order by и индексы
    #32753599
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это как это?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
explain select * from t1  force index (istr) order by str;
+----+-------------+-------+-------+---------------+------+---------+------+------+-------+
| id | select_type | table | type  | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | t1    | index | NULL          | istr |      31 | NULL |    2 |       |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------+


show create table t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) default NULL,
  `str` varchar(30) default NULL,
  KEY `id` (`id`),
  KEY `istr` (`str`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
...
Рейтинг: 0 / 0
order by и индексы
    #32753604
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i9Так что, неужто MySQL не умеет сортировать по индексам?
Всё он может, просто читать надо
http://dev.mysql.com/doc/mysql/ru/ORDER_BY_optimisation.html
...
Рейтинг: 0 / 0
order by и индексы
    #32753876
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.
...
Рейтинг: 0 / 0
order by и индексы
    #32753882
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Прокопюк
Кроме того, если не используется индекс - надо увеличить значение переменной sort_buffer, если данных будет больше этого значения - используется не совсем приятный алгоритм filesort.
Кроме того, если не используется индекc - полюбому filesort
...
Рейтинг: 0 / 0
order by и индексы
    #32754235
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
sky2k Александр Прокопюк
Кроме того, если не используется индекс - надо увеличить значение переменной sort_buffer, если данных будет больше этого значения - используется не совсем приятный алгоритм filesort.
Кроме того, если не используется индекc - полюбому filesort

Ставил sort_buffer по размеру, превышающему базу...
...
Рейтинг: 0 / 0
order by и индексы
    #32754269
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
ХренА с какой стати такой запрос будет использовать индекс istr? Istr индексирует только первые 10 символов. А сортировать надо по всему полю.

Похоже на то, только жалко, получается, что мусклу слабо сортьровать сперва по индексу из 10 символов, а затем, если получаются спорные моменты доводить дело по полному полю... Ведь быстродействие сортировки зависит от длины строк, а тут получается, что нет разницы будет оно сортироваться по индексам или по полям целиком(раз уж мускл требует индексы такой же длины), следовательно, по времени выиграша не будет, и, следовательно, оптимизатор не будет использовать индексы, а раз так, то зачем мне их использовать? Знаю, б-деревья и все такое, но почему-то на практике у меня получилось : 0.3сек - без индексов и 0.32сек с индексами...
...
Рейтинг: 0 / 0
order by и индексы
    #32754287
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
ХренЭто как это?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
explain select * from t1  force index (istr) order by str;
+----+-------------+-------+-------+---------------+------+---------+------+------+-------+
| id | select_type | table | type  | possible_keys | key  | key_len | ref  | rows | Extra |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------+
|  1 | SIMPLE      | t1    | index | NULL          | istr |      31 | NULL |    2 |       |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------+


show create table t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) default NULL,
  `str` varchar(30) default NULL,
  KEY `id` (`id`),
  KEY `istr` (`str`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)


Глюк один обнаружился - в доках находил что для строк индексы мол нужно делать меньшей длины, вот я и делал index(10) на varchar(30), т.е. теперь да, действительно с force index индекс используется, но как я кому-то ответил: 0.3сек против 0.32сек - результат почему-то не в пользу использования индексов..?
...
Рейтинг: 0 / 0
order by и индексы
    #32755597
Sad Spirit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i9но как я кому-то ответил: 0.3сек против 0.32сек - результат почему-то не в пользу использования индексов..?
при использовании индекса читается вся таблица и весь индекс,
при неиспользовании индекса --- только вся таблица...
...
Рейтинг: 0 / 0
order by и индексы
    #32755665
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоп стоп. Откуда взялась цифра 0.3 сек? В исходном собщении было что при полном сканировании эти 100000 записей сортировались за 20 сек.

Как вы измеряете? У вас там query cache случаем не включен?
...
Рейтинг: 0 / 0
order by и индексы
    #32756275
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
Sad Spirit i9но как я кому-то ответил: 0.3сек против 0.32сек - результат почему-то не в пользу использования индексов..?
при использовании индекса читается вся таблица и весь индекс,
при неиспользовании индекса --- только вся таблица...
это понятно, не понятно почему выигрыша нет при использовании индексов, а только накладные расходы.
...
Рейтинг: 0 / 0
order by и индексы
    #32756284
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
ХренСтоп стоп. Откуда взялась цифра 0.3 сек? В исходном собщении было что при полном сканировании эти 100000 записей сортировались за 20 сек.

Как вы измеряете? У вас там query cache случаем не включен?
нет, кэш не включен, 0.3 взялось, так как я переделал тип полей с text на varchar(30), соль-то в том, что разница между "с" и "без" индексов не та, которую хотелось бы видеть...
...
Рейтинг: 0 / 0
order by и индексы
    #32757024
Фотография Хрен
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i9 ХренСтоп стоп. Откуда взялась цифра 0.3 сек? В исходном собщении было что при полном сканировании эти 100000 записей сортировались за 20 сек.

Как вы измеряете? У вас там query cache случаем не включен?
нет, кэш не включен, 0.3 взялось, так как я переделал тип полей с text на varchar(30), соль-то в том, что разница между "с" и "без" индексов не та, которую хотелось бы видеть...

Вы писали (не отпирайтесь)

i9Замена типа str на varchar(30) принесла результат, но 2сек - тоже время, к тому же если база увеличится(что обычно бывает), то время, конечно, вырастет.

Так где правда?

по поводу 0.3 на индекс и fullscan - то 100000 это не тот размер на котором можно проводить тестирование. У вас эта таблица где-нибудь в кэше файловой системы, или scsi диска или еще в каком нибудь кэше лежит, и вы получаете такие результаты. Обычно чтобы уменьшить погрешность от кэшей употребляется размер таблицы в 3 раза превышающий размер RAM. попробуйте.
...
Рейтинг: 0 / 0
order by и индексы
    #32757706
i9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i9
Гость
ХренВы писали (не отпирайтесь)
Так где правда?
Если я Вас запутал, то не обижайтесь плз. просто уже 3 дня с этим воюю, естественно, не сидел и не ждал ответов, перепробывал всякие типы, таблицы, запросы отсюда и разное время. Еще раз прошу прошения, если запутал, просто считал подать публике относительную разницу.

Хренпо поводу 0.3 на индекс и fullscan - то 100000 это не тот размер на котором можно проводить тестирование. У вас эта таблица где-нибудь в кэше файловой системы, или scsi диска или еще в каком нибудь кэше лежит, и вы получаете такие результаты. Обычно чтобы уменьшить погрешность от кэшей употребляется размер таблицы в 3 раза превышающий размер RAM. попробуйте.
С теорией не поспорю, тут Вы пожалуй правы. Гектарной базы, к сожалению у меня нет, посему, видимо, эта тема остается или до того, как база подрастет, или у кого-то найдется база и желание продолжать тему...

P.S.вообще Всем спасибо и за смену text на varchar, пустяк вроде, а намного лучше стало...
...
Рейтинг: 0 / 0
order by и индексы
    #32761678
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i9С теорией не поспорю, тут Вы пожалуй правы. Гектарной базы, к сожалению у меня нет, посему, видимо, эта тема остается или до того, как база подрастет, или у кого-то найдется база и желание продолжать тему...нету, так сделайте, делов-то.
...
Рейтинг: 0 / 0
order by и индексы
    #32761870
Фотография SanyL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. На сколько мне известно = таблицу в MySql можно сделать хит-таблицей (тобишь вся таблица будет в оперативе) - будет быстро....

2. Разберитесь с индексами... потому как поиск по неупорядоченному полю ведется при помощи перебора, а по упорядоченному - используется хеширование и подобныем методы которые ускоряют поиск во много раз...
...
Рейтинг: 0 / 0
order by и индексы
    #32761901
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SanyL1. На сколько мне известно = таблицу в MySql можно сделать хит-таблицей (тобишь вся таблица будет в оперативе) - будет быстро....


Круто что ты знаешь про хи Т таблицы даже не заглянув в мануал, так как цитата "Нельзя производить поиск следующей записи в порядке следования (т.е. использовать индекс в команде ORDER BY)" (это покрайней мере до 4.1) и про скорость тоже можно поспорить, и них недостатков больше чем преимуществ
Зачем человека путать?
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / order by и индексы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]