Ik loop hier ondertussen de hele dag mee te kloten, dus ik vraag het even. Ik werk in CodeIgniter voor het maken van een boeken website. De boeken database heeft meer dan 1 miljoen rijen.
Een index maken gaat niet (behalve primary key), want verder zijn er geen unieke velden. Ik heb de query gecached die traag is en toch blijft het heeeeel erg traag.
Dit is de query:
SELECT title, description, image, isbn FROM boeken WHERE category = '$cat' ORDER BY title ASC LIMIT $page,10
$page = bijv. 20 of 50 (pagination).
Het vreemde is dat de query in de shell binnen een seconde of minder wordt uitgevoerd, in PMA iets minder snel, maar op de web site duurt het zeker 20 seconden voordat de pagina geladen wordt.
Wat er gebeurt in pseudo-code:
HAAL ALLE BOEKEN OP IN RUBRIEK %RUBRIEK%. GEEF TIEN RIJEN TERUG.
--
Even de functie:
Weet iemand wat het probleem hier is?
Een index maken gaat niet (behalve primary key), want verder zijn er geen unieke velden. Ik heb de query gecached die traag is en toch blijft het heeeeel erg traag.
Dit is de query:
SELECT title, description, image, isbn FROM boeken WHERE category = '$cat' ORDER BY title ASC LIMIT $page,10
$page = bijv. 20 of 50 (pagination).
Het vreemde is dat de query in de shell binnen een seconde of minder wordt uitgevoerd, in PMA iets minder snel, maar op de web site duurt het zeker 20 seconden voordat de pagina geladen wordt.
Wat er gebeurt in pseudo-code:
HAAL ALLE BOEKEN OP IN RUBRIEK %RUBRIEK%. GEEF TIEN RIJEN TERUG.
--
Even de functie:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
| function show_cat_list($page=0,$perpage=10,$cat='') { $this->db->cache_on(); $this->output->cache(1000); $theme_url = $this->lib_frontend->get_classVariable('theme_url'); $theme_folder = $this->lib_frontend->get_classVariable('theme_folder'); $base_url = base_url(); $result = array(); $category_details= $this->common_model->category_row($cat); $catid = (isset($category_details['id']))?$category_details['id']:0; $catname = (isset($category_details['name']))?$category_details['name']:$cat; $total_records = $this->common_model->books_in_category_count($cat); // Can be fastened by a cron which saves the number // of records by category. $htmData = ''; if($total_records > 0){ $this->db->cache_on(); $query = $this->db->query("SELECT title, description, image, isbn FROM boeken WHERE category = '$cat' LIMIT ".$this->uri->segment(3).",2"); $records = $query->result_array(); //$records = $this->common_model->books_in_category_list($cat,0,10); ### paging creation $config['base_url'] = $base_url."welcome/listing/"; $config['total_rows'] = $total_records; $config['per_page'] = $perpage; $config['cur_page'] = $page; $config['filter'] = "category"; $config['value'] = $cat; $this->pagination->initialize($config); $links = $this->pagination->create_links(); $bookTitles = array(); foreach($records as $rkey => $rval){ $bookTitles[] = $rval['title']; /*if($rval['image'] != '' && is_file($theme_folder."images/".$rval['image'])){ $bk_img1 = $theme_url."images/".$rval['image']; } else{ $bk_img1 = $theme_url."images/nopicture.png"; }*/ /*if($rval['image'] != ''){ $bk_img1 = $rval['image']; } else{ $bk_img1 = $theme_url."images/nopicture.png"; } */ //$bk_img1 = $rval['image']; $htmData .= "<div style='width:479px; height:auto; overflow:hidden; margin:5px;' class='content'>"; $htmData .= "<table style='width: 479px;' class='content'>"; $htmData .= "<tr>"; $htmData .= "<td colspan='2' style='background:url(".$theme_url."images/title.jpg) no-repeat;width:479px;height:30px;line-height:25px;padding-left:10px;' valign='middle'>"; $htmData .= "<a href='".$base_url."show-book/ibsn/".$rval['isbn'].".html' style='font-weight:bold;color:white;'>".$rval['title']."</a>"; $htmData .= "</td>"; $htmData .= "</tr>"; $htmData .= "</table>"; $htmData .= "<table style='width: 479px; border: 1px solid #253044;border-top:none;' class='content'><tr>"; $htmData .= "<td width='299' align='left'><table style='width:98%;' class='content'>"; //$htmData .= "<tr><th style='width:100%;' align='left'><a href='".$base_url."show-book/ibsn/".$rval['isbn'].".html'>".$rval['title']."</a></th></tr>"; $htmData .= "<tr><td style='width:100%; padding-top:10px; padding-bottom:10px;' class='content alignJustify'>"; if(strlen($rval['description']) < 10){ $htmData .= "Er is geen beschrijving van dit boek beschikbaar"; } else if(strlen($rval['description']) > 150){ $htmData .= substr($rval['description'],0,150) . "..."; } else{ $htmData .= $rval['description']; } $htmData .= "</td></tr>"; //$htmData .= "<tr><td style='width:100%;' class='content alignJustify'>Merchant : ".$rval['merchant']."</td></tr>"; $htmData .= "<tr><td style='width:100%; padding-bottom:10px;' class='content alignJustify'>ISBN : <a href='".$base_url."show-book/ibsn/".$rval['isbn'].".html'>".$rval['isbn']."</a></td></tr>"; $htmData .= "</table></td></tr></table></div>"; } $htmData .= "<table style='width:479px;' class='content'><tr><td width='85'> </td>"; $htmData .= "<td width='394' align='right'>".$links."</td></tr></table>"; } else{ $htmData .= "Foutmelding. Het boek is niet gevonden."; } $result['data'] = $htmData; $result['page_title'] = $catname; $result['meta_description'] = "Vergelijk boeken in de rubriek ".$result['page_title']; $result['meta_keywords'] = (!empty($bookTitles))?implode(',',$bookTitles):$result['page_title']; return $result; } |
Weet iemand wat het probleem hier is?