Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Индексирование таблиц
 
 автор: freeing   (27.01.2011 в 10:43)   письмо автору
 
 

Здравствуйте! У меня есть таблица с заголовками на разных языках id, ru, pl, uk

Скажите есть ли смысл делать ru, pl, uk, en полнотекстовым индексом,
если при выборке используется один из языков, а сравнение происходит по примари id

то есть нужен ли мне FULLTEXT INDEX IX_Title (ru, pl, uk)
доступ к данным осуществляется через JOIN по id (всегда)
или напрямую (редко)

Спасибо!

  Ответить  
 
 автор: cheops   (27.01.2011 в 11:46)   письмо автору
 
   для: freeing   (27.01.2011 в 10:43)
 

А полнотекстовый поиск по каким полям осущестувляется? Если по всем скопом, то да, такой индекс нужен, если по каждому языку в отдельности, то каждому языку нужен свой FULLTEXT-индекс.

PS С id нужно работать отдельно - для ускорения выборки по нему предназначен обычный индекс.

  Ответить  
 
 автор: freeing   (27.01.2011 в 11:57)   письмо автору
 
   для: cheops   (27.01.2011 в 11:46)
 

Честно говоря поиска нет вовсе,
выборка по типу:

SELECT
    t.en As Title,
    b.en AS Body
    -- где en это необходимый язык
FROM
    data m
    LEFT OUTER JOIN title t
        ON m.id= t.id
    LEFT OUTER JOIN body b
        ON m.id= b.id
WHERE
    m.Path = "/news.html";


Просто хочу правильно поставить индексы

  Ответить  
 
 автор: cheops   (27.01.2011 в 12:04)   письмо автору
 
   для: freeing   (27.01.2011 в 11:57)
 

Тогда вам FULLTEXT-индекс не нужен, он используется только для конструкции MATCH(). Тут лучше проиндексировать поле id. В таблице, где он уникален и стоит на первом месте - сделайте его первичным ключом, а в подчиненной таблице - обычным индексом. Если таблицы у вас параллельные, т.е. в одном хранится название, а в другом текст и связь один к одному, можно в обоих id сделать первичным ключом.

  Ответить  
 
 автор: freeing   (27.01.2011 в 12:18)   письмо автору
 
   для: cheops   (27.01.2011 в 12:04)
 

спасибо за грамотный ответ,

скажите а есть ли смысл переместить m.Path (смотрите запрос) на первое место,
учитывая что у меня сравнение по первичным id, через JOIN(ы),
но запрос начинается именно с m.Path

или может его вторым сделать (там правда pid для деревьев)

  Ответить  
 
 автор: freeing   (27.01.2011 в 12:22)   письмо автору
 
   для: cheops   (27.01.2011 в 12:04)
 

вот полный запрос:

<?php
$query 
mysql_query('
SELECT
    Metadata.Created,
    Metadata.Changed,
    Headline.' 
$language ' AS Headline,
    Description.' 
$language ' AS Description,
    Keywords.' 
$language ' AS Keywords,
    Content.' 
$language ' AS Content,
    IF(Metadata.AID <> 0,
        CONCAT_WS(SPACE(1), Author.Name, Author.Surname),
    -- ELSE
        NULL) AS Author
FROM
    Metadata
    LEFT JOIN Headline
        ON Headline.UID = Metadata.UID
    LEFT JOIN Description
        ON Description.UID = Metadata.UID
    LEFT JOIN Keywords
        ON Keywords.UID = Metadata.UID
    LEFT JOIN Content
        ON Content.UID = Metadata.UID
    LEFT JOIN Author
        ON Author.UID = Metadata.AID
WHERE
    Metadata.Path = IF((SELECT COUNT(*) FROM Metadata WHERE Metadata.Path = "' 
$request '") = 0,
        IF("' 
$request '" = ' ',
            NULL,
        -- ELSE
            "/errors/404.html"),
    -- ELSE
        "' 
$request '") AND
    Metadata.VID IN (1, 2)'
);
?>

  Ответить  
 
 автор: freeing   (01.02.2011 в 05:07)   письмо автору
 
   для: freeing   (27.01.2011 в 12:22)
 

UP

  Ответить  
 
 автор: cheops   (01.02.2011 в 13:43)   письмо автору
 
   для: freeing   (27.01.2011 в 12:22)
 

А я здесь m.Path что-то вообще не вижу...

  Ответить  
 
 автор: freeing   (01.02.2011 в 17:03)   письмо автору
 
   для: cheops   (01.02.2011 в 13:43)
 

Metadata.Path - я для понимания, видоизменил начальный запрос, спасибо..

  Ответить  
 
 автор: cheops   (01.02.2011 в 17:22)   письмо автору
 
   для: freeing   (01.02.2011 в 17:03)
 

А на первое место в какой конструкции хотите его поместить? Вроде в WHERE-запросе он и так на первом месте, а в конструкции FROM он не фигурирует.

  Ответить  
 
 автор: freeing   (01.02.2011 в 19:39)   письмо автору
 
   для: cheops   (01.02.2011 в 17:22)
 

видимо я не так выразился.. я имею введу есть ли смысл переместить Path,
на первое место в таблице (DLL), ведь запрос начинается с Path, правильно?..

то есть что должно быть первым Path с которого начинается выборка,
или UID, так как он первый в выборке из других таблиц (JOIN)

  Ответить  
 
 автор: cheops   (01.02.2011 в 19:51)   письмо автору
 
   для: freeing   (01.02.2011 в 19:39)
 

А нет... это не имеет значения, так как записи в таблице идут одна за другой. Таблица не хранится как таблица, она хранится как последовательность строк, вытянутых в одну длинную строку.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования