Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> No index used in query/prepared statement
kriszna
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 6.07.2007
Skąd: Wola Zabierzowska

Ostrzeżenie: (0%)
-----


Witam
Kiedy próbuje pobrać dane z bazy dostaje komunikat
Cytat
PHP Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'No index used in query/prepared statement SELECT * FROM cfg USE INDEX (test)' in /var/www/test.php:11
Stack trace:
#0 /var/www/test.php(11): mysqli->query('SELECT * FROM c...')
#1 {main}
thrown in /var/www/test.php on line 11

Tabela:
  1. CREATE TABLE IF NOT EXISTS `cfg` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(40) COLLATE utf8_polish_ci DEFAULT NULL,
  4. `value` varchar(40) COLLATE utf8_polish_ci DEFAULT NULL,
  5. PRIMARY KEY (`id`),
  6. UNIQUE KEY `id` (`id`),
  7. KEY `test` (`id`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;

Kod PHP:
  1. <?php
  2. mysqli_report(MYSQLI_REPORT_ALL);
  3. $sql_host = 'localhost';
  4. $sql_user = 'user';
  5. $sql_pass = 'pass';
  6. $sql_base = 'base';
  7. echo "TEST\n";
  8. $sql = mysqli_connect($sql_host, $sql_user, $sql_pass, $sql_base) or die("1") ;
  9. $query = "SELECT * FROM cfg USE INDEX (test)";
  10. $result = $sql->query($query);
  11. echo $result->error;
  12. while($tmp = $result->fetch_object())
  13. echo $tmp->name.' -> '.$tmp->value."\n";
  14.  
  15. ?>

Co robię źle?
Z góry dzięki za pomoc,
Pozdrawiam
Kriszna
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Mchl
post
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Wymuszasz na MySQL użycie bzdurnego ineksu. Po co Ci on w tym zapytaniu? Po co Ci w ogóle te dwa indeksy, które dublują klucz podstawowy?

Ten post edytował Mchl 23.05.2010, 13:18:24
Go to the top of the page
+Quote Post
kriszna
post
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 6.07.2007
Skąd: Wola Zabierzowska

Ostrzeżenie: (0%)
-----


Te indeksy utworzyłem, bo myślałem, że to coś pomoże. Bez indexów jest to samo:
  1. CREATE TABLE IF NOT EXISTS `cfg` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(40) COLLATE utf8_polish_ci DEFAULT NULL,
  4. `value` varchar(40) COLLATE utf8_polish_ci DEFAULT NULL,
  5. PRIMARY KEY (`id`)
  6. )

  1. ...
  2. $query = "SELECT * FROM cfg";
  3. ...

Cytat
PHP Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'No index used in query/prepared statement SELECT * FROM cfg' in /var/www/test.php:11
Stack trace:
#0 /var/www/test.php(11): mysqli->query('SELECT * FROM c...')
#1 {main}
thrown in /var/www/test.php on line 11
Go to the top of the page
+Quote Post
Mchl
post
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Ustaw mniej wrażliwy poziom raportowania błędów MySQL.

http://php.net/manual/en/function.mysqli-report.php
Go to the top of the page
+Quote Post
kriszna
post
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 6.07.2007
Skąd: Wola Zabierzowska

Ostrzeżenie: (0%)
-----


Tyle, że to nie rozwiązuje problemu, tylko go ukrywa, z tego co mi wiadomo...
Go to the top of the page
+Quote Post
Mchl
post
Post #6





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Ale to nie jest komunikat o błędzie, tylko informacja.
Tego typu zapytanie nie może użyć indeksu, bo przecież pobierasz całą tabelę. W bardziej złożonym zapytaniu mogłoby to wskazywać na konieczność optymalizacji, tutaj po prostu tak musi być.
Go to the top of the page
+Quote Post
kriszna
post
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 6.07.2007
Skąd: Wola Zabierzowska

Ostrzeżenie: (0%)
-----


Aha
Dzięki wielkie smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 07:31