|
|
|
Перевод в валюты
|
|||
|---|---|---|---|
|
#18+
Есть таблица объектов с ценами и полем, указывающим в какой валюте цена указана. 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2005, 21:43:02 |
|
||
|
Перевод в валюты
|
|||
|---|---|---|---|
|
#18+
так никто не знает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2005, 22:14:50 |
|
||
|
Перевод в валюты
|
|||
|---|---|---|---|
|
#18+
Вы б EXPLAIN привели, чтоли, и указали, какая из таблиц с, а какая s, а то создаётся впечатление, что это не вам надо, а тем, кто будет разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2005, 14:28:16 |
|
||
|
Перевод в валюты
|
|||
|---|---|---|---|
|
#18+
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 валютам, при чем обьекты в базе находятся в трех валютах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2005, 16:46:24 |
|
||
|
Перевод в валюты
|
|||
|---|---|---|---|
|
#18+
Хотелось бы узнать, как правильнее сделать перевод валют. Правильнее = быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2005, 16:47:48 |
|
||
|
Перевод в валюты
|
|||
|---|---|---|---|
|
#18+
Думаю, запрос Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2005, 20:30:24 |
|
||
|
Перевод в валюты
|
|||
|---|---|---|---|
|
#18+
В догонку. Индекс используется если в таблице есть записи, хотябы штук 20, если меньшу, то сервер может и не использовать индекс, потому что 3-4 записи легче закешировать и не искать в индексе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2005, 17:23:17 |
|
||
|
Перевод в валюты
|
|||
|---|---|---|---|
|
#18+
Это да, но в Possible_keys, насколько я помню, возможные ключи всё равно указываются, тут другой случай был... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2005, 17:25:57 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=643&tid=1853453]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 347ms |

| 0 / 0 |
