Оптимизировать выбор запроса из таблицы с миллионами строк - PullRequest
3 голосов
/ 14 января 2011

Я занимаюсь разработкой веб-сайта с помощью собственной CMS Wordpress.

На одной из страниц я запустил функцию, которая делает запрос в базу данных Wordpress, чтобы проверить, опубликовано или нет сообщение, или нет,Я сравниваю заголовок, чтобы проверить его.

Вот мой запрос:

$wpdb->get_row("SELECT id FROM wp_posts WHERE post_title = '" . $title . "'", 'ARRAY_A');

Так что я проверяю, опубликован ли $ title или нет, но я боюсь, если номер постарастет, пусть говорит 1 миллион сообщений, я боюсь, что это будет очень медленно ..

Есть предложения о том, как сделать этот запрос быстрее?я слышал о CREATE INDEX и MySQL кешировании, но я не понимаю, как его реализовать ... любые объяснения и рекомендации будут высоко оценены.

Ответы [ 4 ]

1 голос
/ 14 января 2011

Попробуйте:

CREATE INDEX IX_wp_posts_post_title ON wp_posts (post_title)

Создание индекса займет много времени, но после этого ваши запросы должны быть близки к мгновенным.

1 голос
/ 14 января 2011

создает индексы для ваших таблиц на основе наиболее распространенных столбцов, которые используются при запросе данных, например, здесь, где вы ищете post_title.

Кроме того, благодаря тому, что вы строите оператор SQL-Select на лету, как и вы, вы широко открыты для атак SQL-Injection и должны выходить за пределы строки и предпочтительно делать с параметризованными вызовами запросов.

0 голосов
/ 15 января 2011

Если вы проверяете, есть ли конкретный пост в вашей базе данных, вам следует использовать идентификатор поста для проверки, а не его заголовок. Один, потому что это гарантированный уникальный идентификатор (при условии, что это первичный ключ), и два, потому что запрос сможет искать его гораздо быстрее.

0 голосов
/ 14 января 2011

Не совсем уверен, чего вы здесь добиваетесь.Не похоже, что конец света состоит в том, чтобы иметь две публикации с одинаковым названием.

Еще более важно то, что ваш код полностью sql-инъецируемый.Читайте об этом и используйте параметризованные запросы.

Создать индекс легко.

создать индекс myindex для mytable (имя столбца);

Это поможет выбрать ...но если у вас действительно миллионов строк, вам, возможно, лучше получить правильный совет базы данных - вам может потребоваться разбить данные на части.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...