powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Перевод в валюты
9 сообщений из 9, страница 1 из 1
Перевод в валюты
    #33370005
flyinghero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица объектов с ценами и полем, указывающим в какой валюте цена указана.

id_obj int
price double
currency char(3)

Есть таблица с курсами валют по отношению к определенной валюте (например, USD):

currency char(3) primary key
kurs double

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

Я перед запросом создаю таблицу с курсами всех валют по отношению к валюте поиска (в нашем случае евро).

А затем джойню в запросе:

SELECT s.id_obj, (s.price * c.kurs) as price
FROM s LEFT JOIN c ON s.currency = c.currency WHERE s.price * c.kurs BETWEEN 0 AND 1000

Когда делаешь EXPLAIN этого запроса, то он показывает, что таблицу c курсами он просматривает всю, хотя должен просматривать только одну запись. Почему такое происходит?

И как такой перевод можно сделать попроще? Процедуры не предлагайте, ибо MySQL 4.1
...
Рейтинг: 0 / 0
Перевод в валюты
    #33372319
flyinghero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так никто не знает?
...
Рейтинг: 0 / 0
Перевод в валюты
    #33373765
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы б EXPLAIN привели, чтоли, и указали, какая из таблиц с, а какая s, а то создаётся впечатление, что это не вам надо, а тем, кто будет разбираться.
...
Рейтинг: 0 / 0
Перевод в валюты
    #33374227
flyinghero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
s это таблица обьектов, с таблица курсов.

EXPLAIN выводит такие данные:

table type possible_keys key key_len ref rows Extra
s ALL NULL NULL NULL NULL 17671
c ALL PRIMARY NULL NULL NULL 3 Using where

Причем даже если есть индекс на s.price он этот индекс при поиске не использует.

По идее в поле rows таблицы с должно стоять 1 - на каждую строку из s должна быть одна из c. Но он просматривает 3 строки из c. Пока в таблице курсов данные только по 4 валютам, при чем обьекты в базе находятся в трех валютах.
...
Рейтинг: 0 / 0
Перевод в валюты
    #33374233
flyinghero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы узнать, как правильнее сделать перевод валют. Правильнее = быстрее.
...
Рейтинг: 0 / 0
Перевод в валюты
    #33374647
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, запрос
Код: plaintext
1.
SELECT s.id_obj, (s.price * c.kurs) as price
FROM s LEFT JOIN c ON s.currency = c.currency WHERE s.price BETWEEN  0  AND  1000 /c.kurs
будет работать быстрее. Надо ли объяснять, почему?
...
Рейтинг: 0 / 0
Перевод в валюты
    #33377288
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку. Индекс используется если в таблице есть записи, хотябы штук 20, если меньшу, то сервер может и не использовать индекс, потому что 3-4 записи легче закешировать и не искать в индексе
...
Рейтинг: 0 / 0
Перевод в валюты
    #33377302
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это да, но в Possible_keys, насколько я помню, возможные ключи всё равно указываются, тут другой случай был...
...
Рейтинг: 0 / 0
Перевод в валюты
    #33377313
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAlЭто да, но в Possible_keys, насколько я помню, возможные ключи всё равно указываются, тут другой случай был...
Возможно, тест я не делал...
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Перевод в валюты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]