powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / а как быть с LIKE по цифре ? Не работают индексы
14 сообщений из 39, страница 2 из 2
а как быть с LIKE по цифре ? Не работают индексы
    #39464341
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так увидим мы когда-нить DDL таблиц или нет?
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39464404
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE `phones`(
`userID` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
`clientID` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
`code` SMALLINT(3) NOT NULL DEFAULT 0,
`num` MEDIUMINT(7) ZEROFILL UNSIGNED NOT NULL DEFAULT 0,
`cnt` TINYINT NOT NULL DEFAULT 0,                       # порядковый номер кол-ва телефонов у одного клиента
KEY (`userID`),
KEY (`clientID`),
KEY (`cnt`),    # сортировка
UNIQUE `code_num`(`code`,`num`) # для поиска по телефону
)ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=1;

в клиентах тоже самое, ключи на `passSer_passNum` и отдельно по ним + `name3`
там много столбов ~80
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39464435
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индексы - от балды проставлял, что ли?
И очень интересно, зачем для явно текстовых данных (code, num) выбраны целочисленные типы... особенно с учётом того, что номер телефона может начинаться нулём.
Нахрена номер телефона сделан уникальным? может же быть у двух человек одинаковый номер телефона (скажем, домашний).
tip78
Код: sql
1.
в клиентах тоже самое


Показывай, нефиг байты экономить...

А пока - создай для теста индекс (code,clientID)...
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39464463
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaИндексы - от балды проставлял, что ли?
И очень интересно, зачем для явно текстовых данных (code, num) выбраны целочисленные типы... особенно с учётом того, что номер телефона может начинаться нулём.
Нахрена номер телефона сделан уникальным? может же быть у двух человек одинаковый номер телефона (скажем, домашний).

по каждому индексу существует поиск в отдельных случаях. Там много чего происходит, разного рода отчётность, например.
каким образом исключительно цифры стали "текстовыми данными"? Чаров там нет и не будет. ну и что там 0, есть zerofill. Цифры всегда лучше текста по скорости и байтам.
уникальность как раз для того, чтобы двух телефонов не было в системе. "Домашний" это 1 клиент.

tip78
Код: sql
1.
в клиентах тоже самое


Показывай, нефиг байты экономить...

А пока - создай для теста индекс (code,clientID)...[/quot]
ничего этот индекс не дал.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE `clients`(
`id` MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
`userID` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
`name1` VARCHAR(255) NOT NULL DEFAULT '',
`name2` VARCHAR(255) NOT NULL DEFAULT '',
`name3` VARCHAR(255) NOT NULL DEFAULT '',
`passSer` SMALLINT(4) UNSIGNED ZEROFILL NOT NULL DEFAULT 0,
`passNum` MEDIUMINT(6) UNSIGNED ZEROFILL NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY (`userID`),
KEY (`name3`),
KEY `pass` (`passSer`,`passNum`),
KEY (`passSer`),
KEY (`passNum`)
)ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=1;
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39464564
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самым тормозным получается вот этот запрос:
Код: sql
1.
2.
3.
SELECT `id`,`name3`,passser,CONCAT(`passSer2`,' ',`passNum`) AS `ASpass`
FROM `clients`
WHERE `passSer2` LIKE '45%' ORDER BY `name3` LIMIT 15;


занимает 11-12сек, когда passser = INT
а телефоны ищет за 0.06
ввёл passser2, где он CHAR(4), + INDEX, но это ничего не изменило
explain тот же самый, Key только name3

я так понимаю, это тупик, остаётся только редис...
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39464566
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*0.11-0.12
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39464603
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ещё, что занимательно, с одной цифрой LIKE '9%' он ищет аж 0.70-0.80
это с двумя у него резко падает до 0.12
а с тремя нет - всё также 0.12
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39464697
nimad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не знаю как в MYSQL. в оракле

WHERE `passSer2` LIKE '45%'

нужен функциональный индекс, так как идет неявное преобразование to_char(passSer2), что то типа
Код: plsql
1.
2.
CREATE INDEX idx1 ON clients
TO_CHAR(passSer2);
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39465149
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и всё-таки passSer2 в виде CHAR работает как индекс в explain
если его запускать без ORDER BY name3 - тогда там только name3
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
explain
SELECT id,name3,CONCAT(`passSer2`,' ',`passNum`) AS `ASpass`
FROM `clients`
WHERE passser2 LIKE '4%'
LIMIT 15;

+----+-------------+---------+------------+-------+---------------+----------+---------+------+------+----------+-----------------------+
| id | select_type | table   | partitions | type  | possible_keys | key      | key_len | ref  | rows | filtered | Extra                 |
+----+-------------+---------+------------+-------+---------------+----------+---------+------+------+----------+-----------------------+
|  1 | SIMPLE      | clients | NULL       | range | passser2      | passser2 | 12      | NULL | 3521 |   100.00 | Using index condition |
+----+-------------+---------+------------+-------+---------------+----------+---------+------+------+----------+-----------------------+



т.е. правда моя была:
авторввели 45, ищет LIKE '45%', но `passSer` это SMALLINT, а `passNum` это MEDIUMINT, т.е. INTы
а '45%' это, я так понимаю, STRING
т.е. это разные типы строк, поэтому облом...
короче в example не работают кеи в таком варианте
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39465150
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по passSer MEDIUMINT - так:
Код: sql
1.
2.
3.
4.
5.
+----+-------------+---------+------------+------+---------------+------+---------+------+-------+----------+-------------+
| id | select_type | table   | partitions | type | possible_keys | key  | key_len | ref  | rows  | filtered | Extra       |
+----+-------------+---------+------------+------+---------------+------+---------+------+-------+----------+-------------+
|  1 | SIMPLE      | clients | NULL       | ALL  | pass          | NULL | NULL    | NULL | 39390 |    11.11 | Using where |
+----+-------------+---------+------------+------+---------------+------+---------+------+-------+----------+-------------+
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39465419
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем тупка потихоньку отпускает
пока пришёл к тому, что цифры таки надо искать так:
BETWEEN 4000 AND 4999
и сразу индексы заработали и кол-во row упало ))
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39465440
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну в итоге теперь ищет мгновенно ))
всем спасибо.
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39465592
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78BETWEEN 4000 AND 4999Это если цифр всегда ровно 4, а не 3 или 5.
...
Рейтинг: 0 / 0
а как быть с LIKE по цифре ? Не работают индексы
    #39466556
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksofttip78BETWEEN 4000 AND 4999Это если цифр всегда ровно 4, а не 3 или 5.
тут же речь про паспорт и телефон
...
Рейтинг: 0 / 0
14 сообщений из 39, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / а как быть с LIKE по цифре ? Не работают индексы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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