Содержание
- 1 Содержание:
- 2 EXPLAIN и индексы.
- 3 Простые SELECT (выбрать) запросы к базе данных MySQL
- 4 Клиентские функции
- 5 Top mysql-num-rows Answerers
- 6 Подготовка
- 7 8 ответов
- 8 Получение итоговых строк в результате запроса …
- 9 Получить общее количество строк при использовании LIMIT …
- 10 Схема для тестирования
- 11 PDO
- 12 Мелкие оптимизации
- 13 Top mysql-num-rows Askers
Содержание:
-
HTML
- Что такое HTML
- <!DOCTYPE>
- Мета теги в <head>
- Тег <base>
- Текст в html
- HTML списки
- Ссылки
- Картинки на сайте
- Таблицы
- Фреймы
- Формы
- DHTML
- Музыка
- Видео
- Карты изображений
- SVG карты
- Графика в HTML
- SSI .shtml
- Таблица цветов RGB
- Правильноесочетание цветов
- Таблица«безопасных»цветов
- Таблица символов
- Примеры HTML, CSS
-
CSS
- Таблицы стилей CSS
- Свод стилей
- Псевдоклассы CSS
- Псевдоэлементы CSS
- CSS-градиент
- Flexbox
- Адаптивная верстка
- @media screen
-
JavaScript
- Описание языка
- Методы и функции
- Объекты
- Строки
- Формы
- Фреймы и окна
- Регулярныевыражения
- Условнаякомпиляция
- Примеры скриптов
- Отладка
- Оптимизация
- Игры на JS
- CSS из JS
-
PHP + MySQL
- Введение в PHP
- Основы языка
- Использованиемассивов
- $_server
- Создание функций
- Строки
- Функции работысо строками
- Объектноепрограммирование
- Формы
- Файлы
- Загрузка файлов на сервер
-
MySQL
- Дата, время MySQL
- Вопросы по MySQL
- Cookie
- htaccess
- Безопасность
- Сессии
- Отправка почты
- Кэширование
- Дата, время
- Математическиефункции
- Дополнительныевозможности
- Регулярныевыражения
- Библиотека Curl
- IMAP, POP3, NNTP
- Оптимизация
- Примеры скриптов
- XML + XSLT
-
AJAX
- Знакомство с Ajax
- ОбъектXMLHttpRequest
- СозданиеAjax-приложения
- Отправка формы
- Области применения
- Ajax примеры
- АльтернативныеAjax-у методы
- Ошибки Ajax
- Навигация на AJAX
-
Графика CorelDRAW
- Типы графики
- Пакет CorelDRAW GS
- Зимняя картинка
- Осколок стекла
-
SEO
- Анализ сайта
- WEB продвижение(оптимизация)
- Информацияо домене
- Информация обIP-адресе
- Ping поисковыхсистем
- Robots.txt
- meta Robots
- Каталоги ипоисковики
- Особенности SAPE
- Page Rank
- Сервис созданияссылок
- О Контекстнойрекламе
- Сервисы
-
Разное
- Движки сайтов (CMS)
- Хостинг
- Настройка DNS
- ADSL
- RSS
- ActiveX и HTML
- Паролированиестраницы
- HTTP коды
- HTTP протокол
- HTTP заголовки
- Прячем ссылки
- Черный списоксайтов
- ☭ Заработокв интернете
- Термины иопределения
- Продажа доменов
- НастройкиЯндекс-почты
- Кнопки социалок
- Настроки SIPв телефоне
- Созданиепоискового плугина
- Сервискоротких ссылок
- Telegram: бот, ссылки.
- Друзья
- Статьи Liex
- Задания к л/р
- Примерызачетных задач
- Статьи, обзоры
- Шаблоны сайтов
- Новости
EXPLAIN и индексы.
Здесь без готовой базы (причем заполненной данными — это важно), получить правильную аналитику не получится. Генерить тестовые данные — настолько далеко мой альтруизм не распространяется
Но обычно оптимизация запросов — это отдельный вопрос, который автору велят задавать отдельным постом, включив все запросы, а так же вывод команды, которую надо скопировать 1-в-1 и выполнить в консоли или phpmyadmin
Но в принципе можно дать пару рекомендаций и так: Надо смотреть в колонки — актуально задействованный ключ, и — количество затронутых запросом строк. Причем надо перемножить между собой все цифры из этой колонки. В колонке должно быть хоть что-то, а в колонке — как можно меньшее число.
Если наугад, чисто из опыта — то в для этого запроса пригодился бы индекс по , а в — по
Эти первые три пункта — главное. С них должна начинаться любая оптимизация и именно они дадут принципиальный прирост производительности, пренебрегать ими нельзя.
Простые SELECT (выбрать) запросы к базе данных MySQL
SELECT1. Выбирает ВСЕ данные в таблице tbl_name.
SELECT * FROM tbl_name;
2. Выведет количество записей в таблице tbl_name.
SELECT count(*) FROM tbl_name;
3. Выбирает (SELECT) из(FROM) таблицы tbl_name лимит (LIMIT) 3 записи, начиная с 2.
SELECT * FROM tbl_name LIMIT 2,3;
4. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id по порядку.
SELECT * FROM tbl_name ORDER BY id;
5. Выбирает (SELECT) ВСЕ записи из (FROM) таблицы tbl_name и сортирует их (ORDER BY) по полю id в ОБРАТНОМ порядке.
SELECT * FROM tbl_name ORDER BY id DESC;
6. Выбирает (SELECT) ВСЕ (*) записи из (FROM) таблицы users и сортирует их (ORDER BY) по полю id в порядке возрастания, лимит (LIMIT) первые 5 записей.
SELECT * FROM users ORDER BY id LIMIT 5;
7. Выбирает все записи из таблицы users, где поле fname соответствует значению Gena.
SELECT * FROM users WHERE fname='Gena';
8. Выбирает все записи из таблицы users, где значение поля fname начинается с Ge.
SELECT * FROM users WHERE fname LIKE 'Ge%';
9. Выбирает все записи из таблицы users, где fname заканчивается на na, и упорядочивает записи в порядке возрастания значения id.
SELECT * FROM users WHERE fname LIKE '%na' ORDER BY id;
10. Выбирает все данные из колонок fname, lname из таблице users.
SELECT fname, lname FROM users;
Внимание! Старайтесь указывать конкретные колонки (как в примере 10)
Это важно для того, чтобы запросы обрабатывались намного быстрее!. 11.userscountry
11.userscountry
SELECT DISTINCT country FROM users;
12. Выбирает ВСЕ данные строк из таблицы users где age имеет значения 18,19 и 21.
SELECT * FROM users WHERE age IN (18,19,21);
13.ageusersage
SELECT max(age) FROM users;
14. Выберет данные из таблицы users по полям name и age ГДЕ age принимает самое маленькое значение.
SELECT name, min(age) FROM users;
15. Выберет данные из таблицы users по полю name ГДЕ id НЕ РАВЕН 2.
SELECT name FROM users WHERE id!='2';
Клиентские функции
MySQL API использует структуры данных MYSQL (определены в mysql.h) чтобы установить связь с СУБД. Вы можете устанавливать много соединений из одной программы-клиента, однако, каждое соединений должно быть связано с собственной отдельной структурой MYSQL.
После успешного запроса, если данные должны быть возвращены пользователю, набор результатов должен быть передан через функции mysql_use_result или через функцию mysql_store_result. Обе эти функции сохраняют набор результатов в структуре MYSQL_RES. Разница в том, что mysql_store_result передает весь набор результатов в память клиента, а mysql_use_result инструктирует клиента, чтобы он мог получить строку динамически с сервера с каждым обращением к mysql_fetch_row
Имейте в виду, что mysql_use_result занимает ресурсы сервера, и не должен использоваться для интерактивных прикладных программ, где действия пользователя часто непредсказуемы и могут привести к большим задержкам. Обратите внимание также, что Вы можете держать только одно соединение, которое использует mysql_user_result, открытым, и это должно быть последнее созданное соединение. По умолчанию процесс mysqld закроет соединение после тридцати секунд неактивности
Данные, переданные из набора результатов с помощью mysql_fetch_row, будут помещены в структуру MYSQL_ROW, которая является просто массивом указателей на начало каждого поля.
Top mysql-num-rows Answerers
All Time
15 | hammus 2,52511 gold badge1515 silver badges3434 bronze badges |
|
13 | ehudokai 1,8581212 silver badges99 bronze badges |
|
10 | Gumbo 569k9999 gold badges723723 silver badges803803 bronze badges |
|
9 | cmnardi 87711 gold badge1212 silver badges2222 bronze badges |
|
8 | Francois Deschenes 23.4k33 gold badges5959 silver badges5858 bronze badges |
|
7 | Eduard7 67866 silver badges1818 bronze badges |
|
6 | rid 50.6k2424 gold badges134134 silver badges175175 bronze badges |
|
6 | Lightness Races in Orbit 349k6666 gold badges571571 silver badges953953 bronze badges |
|
6 | Pekka 406k128128 gold badges905905 silver badges10471047 bronze badges |
|
6 | Daniel Vandersluis 79k1717 gold badges153153 silver badges149149 bronze badges |
|
5 | SDwarfs 2,97655 gold badges2323 silver badges5151 bronze badges |
|
5 | tereško 54.9k2222 gold badges9090 silver badges145145 bronze badges |
|
5 | Dirk 2,66711 gold badge3232 silver badges3939 bronze badges |
|
5 | Marc B 332k3333 gold badges367367 silver badges452452 bronze badges |
|
5 | CristiC 19.7k1010 gold badges5252 silver badges8686 bronze badges |
|
5 | Phill Pafford 75k8484 gold badges251251 silver badges375375 bronze badges |
|
5 | Michiel Pater 19.5k44 gold badges3737 silver badges5151 bronze badges |
|
5 | ircmaxell 151k3333 gold badges252252 silver badges306306 bronze badges |
|
5 | codaddict 392k7777 gold badges472472 silver badges507507 bronze badges |
|
4 | Gouda Elalfy 6,05111 gold badge1919 silver badges3434 bronze badges |
Подготовка
Вы должны подключить файл mysql.h в начале Вашей программы на C:
#include "mysql.h"
Вы также должны компоновать программу с математической (для шифрования) и mysqlclient библиотеками:
$ cc -I/usr/include/mysql -L/usr/lib/mysql myapp.c -o myapp -lm -lmysqlclient
Включаемые файлы обычно размещены в /usr/include/mysql, а библиотеки могут быть найдены в /usr/lib/mysql.
Если Вы имеете утечку памяти в вашей программе-клиенте, Вы можете компилировать с опцией --with-debug=yes. Это заставит код клиента использовать пакет ‘safe_malloc’ в библиотеке клиентов MySQL. Вызовите TERMINATE(stdout) или my_end(1) в вашей прикладной программе-клиенте перед выходом, чтобы получить список всех утечек памяти. Детали — в файле mysys/safemalloc.c из дистрибутива MySQL.
Рассмотрим простой пример MySQL-клиента, который только выполнит SELECT и выведет все возвращенные строки в STDOUT. В нем использованы далеко не все функции С API, он должен только дать Вам представление о типичном виде программы-клиента.
8 ответов
Получение итоговых строк в результате запроса …
Вы можете просто повторить результат и посчитать их. Вы не говорите, какой язык или клиентскую библиотеку вы используете, но API предоставляет функцию mysql_num_rows , которая может сообщить вам количество строк в результате.
Это представлено в PHP, например, как функция mysqli_num_rows . Когда вы отредактировали вопрос, упомянув, что используете PHP, вот простой пример использования функций mysqli:
Получить общее количество строк при использовании LIMIT …
Если вы использовали предложение LIMIT, но хотите знать, сколько строк вы получите без него, используйте в своем запросе, а затем SELECT
Для очень больших таблиц это не будет особенно эффективно, и вам лучше выполнить более простой запрос, чтобы получить счетчик и кэшировать его, прежде чем выполнять запросы для получения страниц данных. .
ответ дан Paul Dixon 3 March 2009 в 17:31
Если вам нужно решить проблему с простым SQL, вы можете использовать подзапрос.
ответ дан Marcel Zebrowski 3 March 2009 в 17:31
Если вы хотите получить результат плюс количество возвращаемых строк, сделайте что-то вроде этого. Использование PHP.
ответ дан Robert 3 March 2009 в 17:31
Если в вашем SQL-запросе есть предложение , и вы хотите знать, сколько всего результатов в этом наборе данных, вы можете использовать , а затем . Это возвращает число строк на много больше, чем при использовании Пример (прямо из документов MySQL):
ответ дан Stepan Mazurov 3 March 2009 в 17:31
должен быть вызван сразу после запроса.
ответ дан Quassnoi 3 March 2009 в 17:31
Предполагая, что вы используете функции mysql_ или mysqli_, на ваш вопрос уже должны были ответить другие.
Однако, если вы используете PDO, не существует простой функции, которая возвращает количество строк, извлеченных оператором select, к сожалению. Вы должны использовать count () для набора результатов (обычно после присвоения его локальной переменной).
Или, если вас интересует только число, а не данные, PDOStatement :: fetchColumn () в вашем SELECT COUNT (1) … result.
ответ дан Trevor Bramble 3 March 2009 в 17:31
Так как это 2015, и устарела функциональность , это только визуализация.
Схема для тестирования
Для моей реализации я получаю вывод для обоих выше. Цель вышеупомянутых 2 стратегий состоит в том, чтобы определить, использует ли реализация вашего драйвера rowCount, и если нет, искать запасную стратегию.
ответ дан Drew 3 March 2009 в 17:31
Если вы выбираете данные с помощью WordPress, вы можете получить доступ к количеству строк, возвращенных с помощью $ wpdb-> num_rows:
Если вы хотите конкретный подсчет на основе запроса подсчета mysql, то вы делаете это:
Если вы запускаете обновления или удаляете, то количество затронутых строк возвращается непосредственно из вызова функции:
Это также относится к $ wpdb -> обновить и $ wpdb-> удалить.
ответ дан Dave Hilditch 3 March 2009 в 17:31
PDO
Как говорилось выше и все время говорится на всех сайтах и форумах, надо от от функций mysql переходить к использованию PDO preparеd statements. Это даст сразу ТРИ эффекта:
- пропадут любые ошибки, вызванные неверными данными.
- SQL-инъекции окажутся на свалке истории*)
- (о чем чаще всего не знают) множество рутинных операций станут выполняться проще и меньшим количеством кода.
Главное правило при работе с PDO — все запросы, в которых используются какие-либо переменные, должны выполняться строго через prepare()/execute(), а вместо переменных в запрос должны вставляться пейсхолдеры:
в результате мы получим массив вида который очень удобно потом вывести в шаблоне:
PS. Вот меня часто ругают за то отношение, которое я высказываю по отношению к сообществу пхп в целом, и к тем его представителям, которые отвечают на вопроса на SO.
Ну скажите, какое может быть отношение, если три ответа, из которых
- один переливает из пустого в порожнее: спросив, не ip ли v4 хранится в базе (как будто в варчар(15) можно запихнуть ipv6), потом, когда читатель ждёт уж рифмы «INT»… предлагает тот же варчар, только в профиль. Плюс немасштабируемый IN. Плюс куча мелкой непринципиальной косметики, причем не видно различия между действительно важными вещами и мелочевкой.
- а другие два смогли-таки в джойн, но груп бай уже не осилили.
Мелкие оптимизации
Идея сократить размер данных в таблице — здравая. В первую очередь она касается самого IPv4 адреса, который представляет из себя ничто иное, как обычный 4-байтовый int. И может храниться в колонке соответствующего типа. Для конвертации в mysql есть функции и .Разумеется, никаких проблем с WHERE эти функции не создают. Ну, то есть, если самому не тупить и не писать , применяя функцию к каждой записи в таблице. Применять её надо к константе, оставляя поле как есть:
и индекс будет работать прекрасно.
Также можно вместо слов писать в статусы цифры, и таким образом сократить размер всей записи до 16 байт!
Top mysql-num-rows Askers
All Time
7 | indian 7511 gold badge11 silver badge55 bronze badges |
|
7 | David Rhoden 79533 gold badges1313 silver badges2828 bronze badges |
|
6 | totallyNotLizards 7,75388 gold badges4646 silver badges8282 bronze badges |
|
5 | Corey 31755 silver badges1515 bronze badges |
|
5 | Oliver Spryn 15k3030 gold badges8888 silver badges179179 bronze badges |
|
4 | Sokhrat Sikar 17511 gold badge44 silver badges1414 bronze badges |
|
3 | GeekWithGlasses 5131111 silver badges2424 bronze badges |
|
3 | brocksprogramming 7499 bronze badges |
|
2 | Jeffrey van Zwam 751212 bronze badges |
|
2 | loader 2555 bronze badges |
|
2 | wesslayneb 4711 gold badge11 silver badge77 bronze badges |
|
2 | bluefiredragon 4555 bronze badges |
|
2 | elzaer 69777 silver badges2424 bronze badges |
|
2 | Hector James Haddow 11933 silver badges1111 bronze badges |
|
2 | dje1990 3599 bronze badges |
|
2 | Kishor 1,53122 gold badges1414 silver badges2323 bronze badges |
|
2 | hairynuggets 2,8611919 gold badges5151 silver badges8686 bronze badges |
|
2 | Oseer 70077 gold badges1616 silver badges2828 bronze badges |
|
2 | Kaizokupuffball 2,07955 gold badges2424 silver badges4141 bronze badges |
|
2 | tee 15522 gold badges66 silver badges1212 bronze badges |
Only non community-wiki questions and answers are included in these totals (updated daily)
С этим читают
- Метод execute (объект connection ado)execute method (ado connection)
- : элемент иллюстрации с необязательной подписью
- Jquery метод .hover()
- Parseint()
- Почему важен doctype и как его правильно использовать
- Angular http get example using httpclient
- Работа с базами данных sqlite
- Сравнение потребления памяти различных gui тулкитов
- Roboto italic
- Как создать пользователя mysql и настроить права доступа