|
|
|
производительность like '%blablabla%'
|
|||
|---|---|---|---|
|
#18+
Есть 2 таблицы: create table test1(id int unsigned primary key not null auto_increment, name tinytext not null); create table test2(id int unsigned primary key not null auto_increment, name varchar(255) not null); Содержимое этих таблиц абсолютно идентично, но число записей довольно существенно, ~ 3 млн По моим оценкам select * from test1 where name like '%blabla%'; работает примерно на 30% быстрее чем select * from test2 where name like '%blabla%'; Хотя судя по документации должно бы быть наоборот. Данное явление повторяется на совершенно разных платформах/ОС/версиях MySQL. Для меня производетельность таких запросов крайне существенна. Полнотекстовое индексирование неприемлимо, т.к. осуществляется поиск не слова целиком, а подстроки. Я бы так и использовал tinytext, но при сложных запросах с объединением нескольких таблиц и сортировкой результата приводят к тому, что MySQL при своей работе создаёт временные таблицы, причём ввиду использования tinytext (aka tinyblob), он создает временные таблицы не в памяти, а на диске :( Посоветуйте как быть в такой ситуации... P.S. я понимаю то что для text/blob, mediumtext/mediumblob, etc создаются временные таблицы на диске (могут сожрать очень много места). Но почему для tinytext/tinyblob нельзя использовать heap?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2004, 16:55 |
|
||
|
производительность like '%blablabla%'
|
|||
|---|---|---|---|
|
#18+
Может просто стоит задаться вопросом почему приходиться делать LIKE без использования индексов? Изменить структуру БД или сам запрос! Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 12:27 |
|
||
|
производительность like '%blablabla%'
|
|||
|---|---|---|---|
|
#18+
Я кажется написал довольно ясно, нужен поиск по подстроке. Такого индексирования просто не существует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 16:13 |
|
||
|
производительность like '%blablabla%'
|
|||
|---|---|---|---|
|
#18+
Я все прекрасно понимаю, и не надо так раздрожаться! Если поле Name не очень большое может есть смысл не искать в нем LIKE '%x%' А постараться убрать % в начале выражения LIKE 'x%' Тогда будут использоваться инедксы! Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.10.2004, 17:14 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=32735946&tid=1854733]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 276ms |
| total: | 522ms |

| 0 / 0 |
