Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
дешевые хостинги наконец-то поставят себе PostgreSQL
развивать не ломая обратной совместимости его нельзя
MySQL со сломанной обратной совместимостью никому не нужен.
Обратите внимание — количество уникальных записей узнать напрямую нельзя.
MySQL считает его как количество_записей в таблице / rows_per_key
Запишем это в виде кода (как это в результате вычисляется):
int unique_row_count_mysql = row_count / rows_per_key;
int rows_per_key = row_count / unique_row_count_engine;
int unique_row_count_mysql = row_count / ((int) (row_count / unique_row_count_engine));
Поясняю:
a2 = (int)b / ((int) (b / a));
a2 = (int)( (double)b / ( (double)b /(double) a) ) );
innodb_rec_per_key(
...
{
ha_rows rec_per_key;
....
rec_per_key = (ha_rows)(
(records - num_null)
/ (index->stat_n_diff_key_vals[i + 1]
- num_null));
}
} else {
rec_per_key = (ha_rows)
(records / index->stat_n_diff_key_vals[i + 1]);
}
return(rec_per_key);
}
./include/my_base.h:typedef ulong ha_rows;
a2 = (int)( (double)b / ( (double)b /(double) a) ) );(int) ( (long)b * a ) / b); (приведение к long чтобы избежать переполнения при умножении, исхожу, что в начале a и b int).
Проблемы MySQL оптимизатора