Beiträge von chongs45

    Hallo,

    habe das Problem das ich sehr viele Blogs auf einem VServer habe und mir immer wieder SlowQueries extrem Nerven. Weil dadurch auch mein SWAP voll läuft.

    Hier ist halt z.b diese Abfrage:

    Code
    Select post_id, meta_key, meta_value from wp_postmeta where post_id in ( 50, 51 17 Einträge ) order by meta_id ASC

    Diese ist leider mit keinem Limit belegt und benutzt somit auch "Using filesort"!

    Zum anderen wird in "meta_value" auch longtext benutzt und als Engine MyISAM:

    Code
    CREATE TABLE IF NOT EXISTS `wp_postmeta` (
      `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `post_id` bigint(20) unsigned NOT NULL DEFAULT '0',
      `meta_key` varchar(255) DEFAULT NULL,
      `meta_value` longtext,
      PRIMARY KEY (`meta_id`),
      KEY `post_id` (`post_id`),
      KEY `meta_key` (`meta_key`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8030 ;



    Frage jetzt hierzu:

    Kann ich die Engine von wp_postmeta auf InnoDB ändern? Habe gelesen die Tabelle muss MyISAM bleiben!
    Gibt es eine alternative zu longtext, damit ich ein Index setzen kann?
    Ich habe ältere Versionen von Wordpress die von Anfang an MyISAM genutzt haben, ist es Vorteilhaft die auf InnoDB umzustellen?

    Hallo Zusammen,

    ich habe in meinem Template eine Abfrage nach Links:

    PHP
    <?php if($links) { ?>
                        <ul class="home-links1">
                            <?php $recent = new WP_Query(array( 'cat' => $categories, 'showposts' => $links_num, 'offset' => 1 )); while($recent->have_posts()) : $recent->the_post();?>
                            <li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
                            <?php endwhile; ?>
                        </ul>
                        <?php } ?>
                    </div>

    diese Erzeugt jeweils diese Query

    SQL
    SELECT * FROM wp_posts WHERE ID = 675 LIMIT 1

    Frage wäre, wie lässt Sich die Abfrage so Umschreiben das nicht 100 mal nach Links einzeln abgefragt werden?

    Auszug aus der post.php Zeile 611

    PHP
    if ( ! $_post ) {
                $_post = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->posts WHERE ID = %d LIMIT 1", $post_id ) );
    
    
                if ( ! $_post )
                    return false;

    Wäre für jede Idee Dankbar

    ch45

    Hallo,

    kann mir jemand von euch Sagen wo ich diese Abfrage finde ?

    PHP
    SELECT post_id, meta_key, meta_value FROM wp_postmeta WHERE post_id IN (40,41);

    oder

    PHP
    SELECT user_id, meta_key, meta_value FROM wp_usermeta WHERE user_id IN (1);

    dies ist der einzigste Part den ich gefunden hab.

    PHP
    function has_meta( $postid ) {
        global $wpdb;
    
    
        return $wpdb->get_results( $wpdb->prepare("SELECT meta_key, meta_value, meta_id, post_id
                FROM $wpdb->postmeta WHERE post_id = %d
                ORDER BY meta_key,meta_id", $postid), ARRAY_A );
    }

    Erscheint mir aber nicht Richtig zu sein!

    Wer kann mir helfen?

    mfg
    ch45