RSS
 

mysql

warning: Creating default object from empty value in /usr/local/www/jail4/kostya.in.ua/public_html/modules/taxonomy/taxonomy.pages.inc on line 34.

Преобразование столбца из в BLOB в TEXT

SELECT CAST(VALUE AS CHAR(10000) CHARACTER SET utf8) FROM tablename

MySQL оптимизация производительности

Читаю вот книгу "MySQL оптимизация производительноси", авторы: Бэрон Шварц, Петр Зайцев, Вадим Ткаченко, Джереми Заводны, Арьен Ленц, Дерек Боллинг.

1. InnoDB поддерживает блокировку, которая не упоминается в стандарте SQL:
SELECT ...LOCK IN SHARE MODE
SELECT ... FOR UPDATE

2. MyISAM таблицы по команде SHOW TABLE STATUS LIKE '...' среди прочего могут выдавать checksum всего содержимого таблицы, если таковой подсчет включен. Эта опция может быьт крайне полезна для быстрого сравнения содержимого таблиц.

3. MyISAM:
CREATE TABLE mytable (
...

Позиция строки в запросе

Номер под которым выбралась запись в определенном запросе можно получить вот таким вот интересным способом:

SELECT @num := @num + 1 AS ROW_NUMBER, datatable.*
FROM datatable, (SELECT @num := 0) AS dummy;

MySQL + регулярные выражения

Только что выяснил, что, оказывается, в MySQL регулярные выражения можно использовать только для выборок. Чтобы сделать замену - их использовать нельзя. По крайней мере такая ситуация наблюдается для 5.1 и младше, и, кажись, для 5.5. Что будет в следующей - посмотрим.

Но некоторые товарищи пользуются вот этой библиотекой: http://www.mysqludf.org/lib_mysqludf_preg/
(по крайней мере ссылку на нее встречал в нескольких местах при изучении вопроса).

Если же такой метод не подходит - то выбираем все содержимое таблички и уже в ЯВУ делаем то, что хотим.

MySQL OUTER JOIN

К сожалению, в MySQL нет на данный момент оператора OUTER JOIN. Но иногда эта конструкция очень необходима, чтобы избежать выражений типа:
... WHERE `filed_name` NOT IN ()

Но, к счастью выход есть. Далее я опишу, как я эмулировал эту команду. Пусть у нас есть 2 таблицы t1, t2

table t1
id | name

table t2
t_id | some_data

И нам нужно выбрать все записи из t1 с такими id, которые не содержатся в t2.t_id
Запрос в лоб будет выглядеть следующим образом:
SELECT * FROM t1 WHERE id NOT IN (SELECT t_id FROM t2)

GROUP BY

Выбор нужной строки среди группируемых.

Вчера, один знакомый подкинул мне интересную и, на первый взгляд, простую задачу. Формулировалась она так:

Есть таблица MySQL
rel_id, date, extra_data

PRIMARY (date, extra_data)
rel_id - неукален

Задача выбрать самый свежий экземпляр extra_data для каждого rel_id

Интерес заключался в том, чтобы найти эти данные без подзапроса или join-ов. Иначе задача становится довольно тривиальной.

MySQL индексы и ORDER BY

После установки одного из модулей Друпала, выдался вот такой запрос:

SELECT node.nid AS nid,
family_individual.lastname AS family_individual_lastname,
family_individual.firstname AS family_individual_firstname,
family_individual.middlename AS family_individual_middlename,
family_individual.gender AS family_individual_gender,
family_individual.birthdate AS family_individual_birthdate,
family_individual.deathdate AS family_individual_deathdate
FROM dru_node node
LEFT JOIN dru_family_individual family_individual
ON node.nid = family_individual.nid

MySQL - неочевидная неприменимость индексов при сортировках

Using Index to Sort Data Another great benefit of BTREE index is – it allows to retrieve data in sorted form hence avoiding external sort process for executing of queries which require sorting. Using index for sorting often comes together with using index to find rows, however it can also be used just for sort for example if you’re just using ORDER BY without and where clauses on the table . In such case you would see “ Index ” type in explain which correspond to scanning (potentially) complete table in the index order.

MySQL 5.5 RC

Улучшения в производительности, доступности и юзабилити подчеркивают продолжаю

Ночные посиделки в аське

1. В мускуле можно сделать самому прокси для кеширования запросов в самом простом варианте - на файлах, а можно оставить все встроенному кешеру.

+ файлов: нет ограничения на общий размер + размер на 1 выборку; не сбрасывается при изменении поля в таблице

+ мускульного кеша: всегда актуален + очень быстр, т.к. сидит в ОЗУ

2. Известно, что мускуль, если имеет возможность, результаты выборки формирует лишь на значениях из индекса (т.е. если поля требуемые поля запроса - перекрываются полями входящими в индекс).

условие: есть таблица id | fld1 | fld2 | fld3; key(fld1, fld2)