2013-01-01 19 views
8

ho fatto partizionare mio tavolo 300MB e cercando di fare query di selezione da p0 partizione con questo comandoCome selezionare le righe da divisorio in MySQL

SELECT * FROM employees PARTITION (p0); 

Ma sto seguente errore

ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near '(p0)' at line 1 

Come scrivere query di selezione per ottenere dati da partizioni specifiche?

+1

Controllare questo post: http://dba.stackexchange.com/questions/23138/unable -to-Select-the-record-da-specific-partizione-in-mysql. Non è supportato. – bonCodigo

+1

Perché hai bisogno di quel costrutto? Non puoi semplicemente aggiungere una clausola WHERE che colpisce p0? –

risposta

10

A seconda della versione di MySql, la parola chiave PARTITION non esiste fino a MySQL 5.6.2. Useresti MySQL 5.5 o anche 5.1, ma non 5.6. Nel caso in cui, si sta utilizzando MySQL 5.1, allora si può fare qualche soluzione alternativa come qui di seguito

SELECT partition, count(ID) 
FROM 
(
    SELECT ID, 
     case when condition then p1 
      when condition then p2 
     ..... 
     end as partition 

    FROM 
     table 
) s1 
GROUP BY partition 

Nota: La soluzione di cui sopra è solo soluzione per ottenere il desiderio di uscita.

Si può anche provare questa query per contare il numero totale di righe per la partizione.

SELECT table_rows as 'count(*)' FROM information_schema.partitions WHERE table_schema = schema() and table_name ='employees' and partition_name = 'p0'; 

Nota: è possibile modificare table_schema = schema()-table_schema = 'yourschema'

+0

Grazie, funziona – Kad

+0

Lo farò, in attesa di passare il tempo minimo di accettazione. – Kad

+0

ok nessun problema, non dimenticarti di accettare, altri otterranno il vantaggio – Ravi

2

Avete ragione, la selezione esplicita di PARTITION non è supportata nella versione 5.1.54. Vedere this post

1

Non certo perché la mia risposta è stata trasformata in un commento;)

rimetterlo. Controlla questo question on DBA. Non è supportato nella versione corrente di MYSQL.

Si può anche verificare MYSQL dev article

+1

perché, avresti postato una risposta breve. – Ravi

+0

Infatti l'asnwer è stato pubblicato prima di averlo completato;) grazie comunque. – bonCodigo

6

In realtà dal momento che MySQL 5.6 la sintassi supportato è:

SELECT * FROM table PARTITION (partitionName);