Ответы пользователя по тегу MySQL
  • Выбор региона и населенного пункта из списка (БД), подсветка карты и нас. пунктов (svg). Как их подружить?

    kashey
    @kashey
    Программирую большую половину жизни
    1. Берем хоть jQuery и меняем opacity нужному региону
    2. Выкидываем все на свалку, берем нормальные "карты" - благо их много, делаем на них.
    Но прийдется немного попрограмировать :(
    Ответ написан
    Комментировать
  • Как выбрать все записи из таблицы mysql?

    kashey
    @kashey
    Программирую большую половину жизни
    Одна команда - одна запись. Много команд (в цикле) - много записей.
    Если записей реально очень много (десятки-сотни тысяч) - имеет смысл использовать "unbuffered query".
    Ответ написан
    Комментировать
  • Как лучше сравнить базу данных и текстовый файл (артикул-цена, больше 2000 строк)?

    kashey
    @kashey
    Программирую большую половину жизни
    Даже если такой запрос будет выполнять 5 минут - это совершенно нормально для операции которая выполняется раз в день.
    Улучшить ситуацию можно через хранимки или начать использовать https://php.net/manual/ru/mysqli.multi-query.php
    С другой стороны у вас совершенно "упушен" момент про индексы, и условия в первом и втором запросе различаются.
    Что можно сделать чтобы было "совсем хорошо"
    1. Установить тип поля артикуля в char[точный размер]. Вообще "fixed" таблицы, где размер строки всегда можно заранее посчитать работают лучше.
    2. Добавить UNIQUE индекс на артикуль. Он же уникальный?
    3. Идем по "новым записям" и "INSERT INTO table(...)... ON DUPLICATE KEY UPDATE price=newprice. В общем инсертим строки, но если такая есть - обновляем.
    3.1 Если новых строк нет вообще - делаем только апдейты
    3.2 Если есть - заводим еще одно поле - "dirty". В начале ставим в 0, в инсертах и апдейтах ставим в 1. После окончания работы строк, которые не обновлялись" будет 0.
    4. Можно еще вспомнить, что любые строковые индексы работают плохо, как бы вы их не спрашивали. Можно добавить еще одно поле crc=CRC32(article), которая переведет строку в число.
    4.1 Итого UNIQUE вешается на два поля - crc(первое), article
    4.2 В WHERE выражениях можно делать WHERE crc=CRC32(?) and article=? - это будет работать очень сильно быстрее и без коллизий.

    А вообще можно особо и не париться, например обновлять данные "в лоб" на локальном компе, а потом переливать дампы.
    Ответ написан
  • Mysql. Как выбрать из диапазона?

    kashey
    @kashey
    Программирую большую половину жизни
    Правильно найти нужное в "12, 20, 30" на самом деле сложно - легко найти в ",12,20,30," -> where month_day like concat('%,',DAYOFMONTH( CURDATE( )),',%')
    Вот только никакие индексы тут не работают, и эта чтука будет сильно тупить - спасет только нормализация БД или Closure tables(они же кишки)
    Хотя день месяца можно и на битовом уровне закодировать - из там как раз 32
    Ответ написан
  • В каких таблицах хранить юзеров?

    kashey
    @kashey
    Программирую большую половину жизни
    1 и справочники.
    По той простой причине что имя пользователя - уникально, и должно быть где-то "забито".
    С другой стороны это не мешает на админку что-то сложнее навешать, например авторизацию по другой таблице. Но это не пункт 2 - можно навешать дополнительную авторизацию на админку, например через "base auth".
    Будет в два раза крепче.
    Ответ написан
    Комментировать
  • Как запретить использование MyISAM?

    kashey
    @kashey
    Программирую большую половину жизни
    1. Шлите пользователям уведомляки о MyIsam
    2. Повесте тригер\mysql-proxy который будет ревратить myisam в innodb
    3. Для фултекста еще сфинкс к mysql прикрутите
    4. И это все можно рекламировать как бонусы, а не ограничения
    Ответ написан
    1 комментарий
  • MySQL - Синхронизация нескольких потоков

    kashey
    @kashey
    Программирую большую половину жизни
    INSERT ON DUPLICATE UPDATE и другие тригеры на вставку.
    также — LOCK таблиц. Также лок мозгов на сервере и другие мьютексы.
    Вариант 3 — работа через промежуточную инстацию
    Ответ написан
    Комментировать
  • Как выбрать случайную запись из базы MySQL без использования первичного ключа и order by rand()

    kashey
    @kashey
    Программирую большую половину жизни
    заведите поле uRAND в таблице и раз в день сидите туда истинный RAND
    после чего SELECT * FROM table WHERE uRAND<somerandvalue ORDER BY uRAND DESC LIMIT 1
    Ответ написан
    Комментировать
  • Схема хранения изменяющихся данных с историей

    kashey
    @kashey
    Программирую большую половину жизни
    Сам использовал вариант 2.
    Как не странно — очень часто выбрать правильное — не так уж и просто.
    Долго парился с группами и правильными ордерами, чтобы выбирать последние данные кучи разнородного материала.

    Кончилось тем что историю храню отдельно, а последний срез данных — отдельно.
    Вообще никаких проблем, да и операции с главной базой стали проще и быстрее
    Ответ написан
    Комментировать
  • MySQL и оперирование с рейтингом игроков

    kashey
    @kashey
    Программирую большую половину жизни
    UPDATE table SET spore=spore+1/rand(1,10000000000000)
    берем и молча добавляет флуктуацию после запятой.
    Если у вас spore — определена до 0.001 например — определите флуктуацию как 0.001\rand

    Как вариант — фиксиовать эту флуктуацию на определенного юзера при создании этого самого пользователя.

    Ну это детали.
    Главное — в том что вы всегда можете выполнить

    SELECT COUNT(*) FROM table WHERE spore<?

    И получить точное значение, даже если ищем spore=12 и этих 12 несколько сотен тысяч
    Ответ написан
    1 комментарий
  • Географически распределённый MySQL

    kashey
    @kashey
    Программирую большую половину жизни
    Если географическое разделение делается для ускорение доступа локальных пользователей( те к вынесеным серверам БД еще и бэкенды стоят) то самое лучшее это разделить бд на две части.
    Одна часть «ядро» которая частенько синхриться, второе — местно-географическое отпочкование, которое в неком роде самом по себе.
    И которое можно синхрить без паранои. Что сильно облегчает работу.
    Ответ написан
    Комментировать