Здравствуйте
Есть таблица, в ней сейчас 150 млн записей, в будущем будет больше, но уже сейчас есть проблемы. Даже простая выборка уже не работает. Что нужно сделать что бы простые запросы летали?
Пример запроса SELECT * FROM table WHERE text != ''
оч мало исходных данных. В первых структуру таблицы нада. Не понятно, варчар там или текст. Это сильно влияет на длину индекса. 2 индексы в студию. 3 експлейн.
На вскидку SELECT * FROM table WHERE text != '' заменить на SELECT * FROM table WHERE text IS NOT NULL
Тогда не будут сравниваться строки, а только присутствует запись или нет. Должно немного ускорить. Ну и первые три пункта, чтобы подсказать что-то точнее.
Как минимум делать запрос без *, т.е. выбирать нужные Вам поля. Плюс, наврятли Вам нужно получить сразу все записи результата, поэтому используйте выражение LIMIT, а дальше порционно берите новые данные.
спасибо, улучшил запрос, выбираю нужное поле, поставил лимит 1000, стало намного быстрее. Что еще можно сделать что бы ускорить? И еще у меня очень медленно работает эта таблица в пхпмайадмин, а это можно как-то исправить?)
vladkuzmenko: Тут нужно на структуру таблицы также смотреть. Вообще, лучше всего, сначала почитайте про нормализацию и про первые три нормальные формы.
Какая селективность индекса?
Не равно тяжёлый запрос
Пустота намекает на текстовое поле. Добавьте ещё столбец типа tinyint если поле пустое текстовое, то заносите в него 0, если не пустое то 1. Далее ищете все строки где столбец=1 Работать будет не особо быстро но лучше.
спасибо) Я не очень разбираюсь, но мне кажется WHERE text != '' индексы не помогут, так как должны все записи пройтись и проверить пустое это поле или нет. Или я не прав?