# Table vs View query

**URL:** <https://forums.percona.com/t/table-vs-view-query/2514>\
**Category:** Percona XtraDB Cluster 5.x\
**Created:** [December 2, 2012, 10:30pm UTC](https://forums.percona.com/t/table-vs-view-query/2514 "2012-12-02T22:30:49Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![radon](https://avatars.discourse-cdn.com/v4/letter/r/e5b9ba/32.png) [@radon](https://forums.percona.com/u/radon)\
**Post date:** [December 2, 2012, 10:30pm UTC](https://forums.percona.com/t/table-vs-view-query/2514/1 "2012-12-02T22:30:49Z")

</div>

I have set up a 3 node cluster, and imported a mysql db successfully. When attempting to query a view using “select \* from view\_name”, there is an incredible lag time, 100 records takes about 10 seconds. However when querying tables, Percona works as expected. Does anyone know why this is happening or have a workaround for it? Thanks in advance!

-Tom

---

<div class="post-metadata">

**Author:** ![niljoshi](https://sea1.discourse-cdn.com/flex019/user_avatar/forums.percona.com/niljoshi/32/16889_2.png) [@niljoshi](https://forums.percona.com/u/niljoshi)\
**Post date:** [December 4, 2012, 3:16am UTC](https://forums.percona.com/t/table-vs-view-query/2514/2 "2012-12-04T03:16:29Z")

</div>

Hi,

Can you provide explain plan of both the queries? (select queries for view and table). It would be helpful if you can provide table/view structures and version of XtraDB cluster.

---

<div class="post-metadata">

**Author:** ![radon](https://avatars.discourse-cdn.com/v4/letter/r/e5b9ba/32.png) [@radon](https://forums.percona.com/u/radon)\
**Post date:** [December 4, 2012, 6:01pm UTC](https://forums.percona.com/t/table-vs-view-query/2514/3 "2012-12-04T18:01:22Z")

</div>

Thanks for the reply. I’m using 5.5.27-55 Percona XtraDB Cluster (GPL) running on 32-bit Ubuntu 11.10. Running ‘select \* from crs\_client\_search’ takes about an hour for 15k rows but interestingly, when running the query for the view as mentioned below, it runs as expected in a reasonable amount of time. It seems as though the definer algorithm to produce the view from the appropriate tables in the db takes an incredibly long time?  
The sql for the ‘crs\_client\_search’ view is about 2 pages long:  
select `p`.`p_uuid` AS `p_uuid`,`p`.`given_name` AS `given_name`,`p`.`custom_name` AS `custom_name`,`p`.`family_name` AS `family_name`,`p`.`full_name` AS `full_name`,`p`.`incident_id` AS `incident_id`,`pd`.`birth_date` AS `birth_date`,`pd`.`years_old` AS `years_old`,`pd`.`opt_country` AS `opt_country`,`pd`.`occupation` AS `occupation`,`pd`.`opt_gender` AS `opt_gender`,`ps`.`opt_status` AS `opt_status`,`ps`.`last_updated` AS `last_updated`,`ps`.`creation_time` AS `creation_time`,`c1`.`contact_value` AS `home_phone`,`c2`.`contact_value` AS `mobile_phone`,`c3`.`contact_value` AS `alt_phone`,`c4`.`contact_value` AS `email`,`c5`.`contact_value` AS `street_1`,`c6`.`contact_value` AS `street_2`,`c7`.`contact_value` AS `city`,`c8`.`contact_value` AS `state`,`c9`.`contact_value` AS `postal`,`ptf`.`in_date` AS `in_date`,(case when (`ps`.`opt_status` = ‘in’) then NULL else `ptf`.`out_date` end) AS `out_date`,(case when (`ps`.`opt_status` = ‘trn’) then NULL else `ptf`.`dest_facility` end) AS `dest_facility`,`f`.`facility_uuid` AS `facility_uuid`,`f`.`facility_name` AS `facility_name`,`f`.`facility_code` AS `facility_code`,`f`.`facility_group` AS `facility_group`,`sl1`.`language` AS `altlang1`,`sl2`.`language` AS `altlang2`,`sl3`.`language` AS `altlang3`,`ec`.`name` AS `ec_name`,`ec`.`phone` AS `ec_phone`,`ec`.`relationship` AS `ec_relation`,`ma`.`injury` AS `injury`,`ma`.`special_medical` AS `special_medical`,`ma`.`special_mental` AS `special_mental`,ifnull(`gd`.`adults`,1) AS `adults`,ifnull(`gd`.`children`,0) AS `children`,ifnull(`gd`.`infants`,0) AS `infants`,ifnull(`gd`.`unknown`,0) AS `unknown`,ifnull(`ptg`.`p_uuid_2`,‘’) AS `group_primary`,((`gd`.`adults` + `gd`.`children`) + `gd`.`infants`) AS `group_count`,`cr`.`relation` AS `relation`,ifnull(`p2`.`full_name`,‘’) AS `client_group_name` from (((((((((((((((((((((((((`person_uuid` `p` join `crs_person_to_group` `ptg` on((`p`.`p_uuid` = `ptg`.`p_uuid_1`))) left join `crs_common_relations` `cr` on((`ptg`.`relation` = `cr`.`id`))) left join `person_uuid` `p2` on((`ptg`.`p_uuid_2` = `p2`.`p_uuid`))) left join `person_details` `pd` on((`p`.`p_uuid` = `pd`.`p_uuid`))) left join `person_status` `ps` on((`p`.`p_uuid` = `ps`.`p_uuid`))) left join `contact` `c1` on(((`c1`.`p_uuid` = `p`.`p_uuid`) and (`c1`.`opt_contact_type` = ‘curr’)))) left join `contact` `c2` on(((`c2`.`p_uuid` = `p`.`p_uuid`) and (`c2`.`opt_contact_type` = ‘cmob’)))) left join `contact` `c3` on(((`c3`.`p_uuid` = `p`.`p_uuid`) and (`c3`.`opt_contact_type` = ‘calt’)))) left join `contact` `c4` on(((`c4`.`p_uuid` = `p`.`p_uuid`) and (`c4`.`opt_contact_type` = ‘email’)))) left join `contact` `c5` on(((`c5`.`p_uuid` = `p`.`p_uuid`) and (`c5`.`opt_contact_type` = ‘street\_1’)))) left join `contact` `c6` on(((`c6`.`p_uuid` = `p`.`p_uuid`) and (`c6`.`opt_contact_type` = ‘street\_2’)))) left join `contact` `c7` on(((`c7`.`p_uuid` = `p`.`p_uuid`) and (`c7`.`opt_contact_type` = ‘city’)))) left join `contact` `c8` on(((`c8`.`p_uuid` = `p`.`p_uuid`) and (`c8`.`opt_contact_type` = ‘state’)))) left join `contact` `c9` on(((`c9`.`p_uuid` = `p`.`p_uuid`) and (`c9`.`opt_contact_type` = ‘postal’)))) left join `crs_latest_ptf` `ptf` on((`p`.`p_uuid` = `ptf`.`p_uuid`))) left join `fms_facility` `f` on((`f`.`facility_uuid` = `ptf`.`facility_uuid`))) left join `crs_person_to_language` `pl1` on(((`p`.`p_uuid` = `pl1`.`p_uuid`) and (`pl1`.`ordinal` = 1)))) left join `crs_language` `sl1` on((`pl1`.`language` = `sl1`.`id`))) left join `crs_person_to_language` `pl2` on(((`p`.`p_uuid` = `pl2`.`p_uuid`) and (`pl2`.`ordinal` = 2)))) left join `crs_language` `sl2` on((`pl2`.`language` = `sl2`.`id`))) left join `crs_person_to_language` `pl3` on(((`p`.`p_uuid` = `pl3`.`p_uuid`) and (`pl3`.`ordinal` = 3)))) left join `crs_language` `sl3` on((`pl3`.`language` = `sl3`.`id`))) left join `crs_emerg_cont` `ec` on((`p`.`p_uuid` = `ec`.`p_uuid`))) left join `crs_med_alert` `ma` on((`p`.`p_uuid` = `ma`.`p_uuid`))) left join `crs_group_details` `gd` on((`p`.`p_uuid` = `gd`.`p_uuid`))) where (`ps`.`isdeleted` = 0)
